survos/base-bundle

为 Symfony 6 应用程序添加一些工具和资源

资助包维护!
kbond

安装: 117

依赖项: 0

建议者: 0

安全: 0

星级: 1

关注者: 3

分支: 0

开放问题: 0

语言:Twig

类型:symfony-bundle

2.4 2022-07-01 09:46 UTC

This package is auto-updated.

Last update: 2024-09-06 03:29:16 UTC


README

script ~/session.log
symfony ...
exit
bin/console make:docs-from-log (get commits, etc.)

添加配方仓库,直到 basebundle 准备就绪进行生产,添加仓库。Umbrella Admin Bundle 是 BaseBundle 2.0 的必备组件,BaseBundle 3 可能会使用 Tabler。

"/home/tac/survos/bundles/recipes/index.json",

REPO=bbtest
symfony new --webapp $REPO && cd $REPO && yarn install 
composer config minimum-stability beta
composer req api-platform/core:^2.7
composer req api-platform/core:^3.0

composer config extra.symfony.endpoint --json '["https://api.github.com/repos/survos/recipes/contents/index.json", "flex://defaults"]'
composer config minimum-stability beta
composer config prefer-stable true

composer config repositories.survos_base_bundle '{"type": "vcs", "url": "git@github.com:survos/BaseBundle.git"}'
composer config repositories.survos_bootstrap_bundle '{"type": "vcs", "url": "git@github.com:survos/BootstrapBundle.git"}'
composer config repositories.tacman_hello '{"type": "vcs", "url": "git@github.com:tacman/TacmanHelloBundle.git"}'
composer config repositories.survos_workflow '{"type": "vcs", "url": "git@github.com:survos/workflow-bundle.git"}'
composer config repositories.tacman_tree_tag_tag '{"type": "vcs", "url": "git@github.com:tacman/twig-tree-tag.git"}'

composer config repositories.survos_maker '{"type": "vcs", "url": "git@github.com:survos/AdminMakerBundle.git"}'
composer config repositories.survos_maker '{"type": "path", "url": "/home/tac/survos/bundles/maker-bundle"}'
composer req survos/maker-bundle:*@dev && git diff config

composer config repositories.survos_base_bundle '{"type": "path", "url": "/home/tac/survos/bundles/BaseBundle"}'
composer req survos/base-bundle:*@dev && git diff config

composer config repositories.ics_bundle '{"type": "vcs", "url": "git@github.com:tacman/IcsBundle.git"}'

composer req umbrella2/adminbundle
composer req symfony/workflow
composer req survos/maker-bundle --dev

composer req survos/base-bundle:*
sed -i "s|# MAILER_DSN|MAILER_DSN|" .env

//return new RedirectResponse($this->urlGenerator->generate('some_route'));
bin/console make:user --is-entity --identity-property-name=email --with-password User -n
echo "1,AppAuthenticator,,," | sed "s/,/\n/g"  | bin/console make:auth

sed  -i "s|some_route|app_homepage|" src/Security/AppAuthenticator.php 
sed  -i "s|//return|return|" src/Security/AppAuthenticator.php 
sed  -i "s|throw new|//throw new|" src/Security/AppAuthenticator.php 

bin/console survos:make:menu AdminMenu (maybe just copy during recipe)?

在 github 上创建


UX Datatable(工作正在进行中)

composer config repositories.ux-datatable '{"type": "vcs", "url": "git@github.com:tacman/ux-datatable.git"}' composer req tacman/ux-datatable

KnpMenu 的工作原理。

由于在 services.yaml 中进行了配置,因此 Survos\BaseBundle\Menu 中的 MenuBuilderService 已注册。

  Survos\BaseBundle\Menu\MenuBuilder:
    class: Survos\BaseBundle\Menu\MenuBuilder
    arguments:
      - "@knp_menu.factory"
      - "@event_dispatcher" 
    tags:
      - { name: knp_menu.menu_builder, method: createSidebarMenu, alias: survos_sidebar_menu }
      - { name: knp_menu.menu_builder, method: createPageMenu, alias: survos_page_menu }

这意味着每当 knp_menu_get 使用别名(例如,survos_sidebar_menu)调用时,MenuBuilder.php 会创建一个根元素并触发一个事件,该事件由 SidebarMenuSubscriber(在应用程序中)捕获。

然后我们可以构建菜单。

@TODO

  • 从 Umbrella 扩展
  • 添加 DataTableBundle(ux 组件)
  • 将 #[RouteParameter] 添加到实体属性中。
  • 使 ParamConverter 通过属性监听
  • 添加 LandingBundle(make:landing)
  • Symphony 5.4 或 6

Survos Admin Bundle

一个观点较多的包,它提供了一种快速使用 Symfony 启动和运行的方式。
特别是,它设置并使用了以下内容

  • AdminLTE4(Bootstrap 5)
  • Knp Menu 用于侧边栏和顶部导航
  • webpack encore
  • 可选 jQuery(用于 js-tree 和 datatables)

假设

尽管以下内容可以禁用,但默认情况下,该包假设您想要以下内容

  • 身份验证
  • 一个用户和一个管理员角色
  • 用户
  • API(用于 Vue、DataTable)
  • Bootstrap 5,图标
  • 可部署在 Heroku 上

流程

转到 ... 并填写您想要的表格。运行脚本以创建 Symfony Shell。


Then in app.js

```javascript
require('adminkit/static/js/app');
require('../css/app.scss');

和 app.scss

@import "~adminkit/static/css/app.css";

修改 app.js

require('@popperjs/core');
require('bootstrap');
require('Hinclude/hinclude');
require('./css/app.scss');
@import "~bootstrap/dist/css/bootstrap.min.css";
@import "../../public/bundles/survosbase/volt-dist/css/volt.css";

目标

此包最初创建是为了隔离其他包的问题,并尽可能快速、轻松地在网站上获取数据。

一些值得检查的主题

https://github.com/xriley/portal-theme-bs5(检查许可证) https://github.com/zuramai/voler

要求

  • composer
  • PHP 7.2+
  • yarn
  • Symfony CLI(用于运行本地服务器、创建项目等。)

创建 github 项目

在 github.com 上创建一个没有文件(没有 README 或许可证)的仓库,将其克隆到某个目录并转到那里。

 REPO=base-bundle-demo 
 git clone git@github.com:survos/$REPO.git && cd $REPO 
  • 创建没有 git 仓库的 Symfony 骨架,然后添加仓库。允许配方
rm -f LICENSE && rm -f README.md && mv .git .. && symfony new --full . --no-git --version=5.4 && mv ../.git . && git checkout .
composer config extra.symfony.allow-contrib true
composer req webapp && yarn install && yarn encore dev
  • 登录后,在 Heroku 上创建项目。可选创建数据库。

DBNAME=test echo "DATABASE_URL=postgresql://main:main@127.0.0.1:5432/$DBNAME" > .env.local

或者如果您正在使用 Sqlite。

heroku create $REPO
heroku addons:create heroku-postgresql:hobby-dev
echo "DATABASE_URL=$(heroku config:get DATABASE_URL)" > .env.heroku.local
# Without heroku, use sqlite (or setup MySQL)
echo "DATABASE_URL=sqlite:///%kernel.project_dir%/var/data.db" > .env.local
echo "DATABASE_URL=sqlite:///%kernel.project_dir%/var/data.db" > .env.local

我们始终想要一些安全性,因此某些路由可以被保护。创建一个用户实体,然后创建一个 LoginFormAuthenticator。调整 AppAuthenciator 以在成功登录后返回主页。将 MAILER_URL 设置为默认值。

bin/console make:user User --is-entity --identity-property-name=email --with-password -n
#sed -i "s|public function getEmail| public function getUsername() { return \$this->getEmail(); }\n\n public function getEmail|" src/Entity/User.php

sed -i "s|# MAILER_DSN|MAILER_DSN|" .env


echo "1,AppAuthenticator,SecurityController,/logout," | sed "s/,/\n/g"  | bin/console make:auth
sed -i "s|// For example.*;|return new RedirectResponse(\$this->urlGenerator->generate('app_homepage'));|" src/Security/AppAuthenticator.php 
sed -i "s|throw new \\Exception\('TODO\: provide a valid redirect inside '\.__FILE__\);||" src/Security/AppAuthenticator.php 

可选的,因为 SurvosBaseBundle 已经有了这个,适用于移动设备

bin/console make:registration-form

现在安装 Survos BaseBundle

composer config minimum-stability dev
composer config minimum-stability beta
composer config prefer-stable true

composer config repositories.tacman_hello '{"type": "path", "url": "/home/tac/survos/bundles/TacmanHelloBundle"}'

composer config repositories.html_prettify '{"type": "path", "url": "/home/tac/survos/bundles/HtmlPrettifyBundle"}'
COMPOSER_DISABLE_NETWORK=1 composer req survos/html-prettify-bundle:*@dev

composer config repositories.barcode '{"type": "path", "url": "/home/tac/survos/bundles/BarcodeBundle"}'
composer config repositories.survos_workflow '{"type": "path", "url": "/home/tac/survos/bundles/WorkflowBundle"}'

composer config repositories.survos_maker '{"type": "path", "url": "/home/tac/survos/bundles/maker-bundle"}'
composer req survos/maker-bundle:*@dev && git diff config

# composer req survos/barcode-bundle:*@dev
git checkout . && composer req survos/barcode-bundle:*@dev && git diff config

composer config repositories.survos_tree '{"type": "path", "url": "/home/tac/survos/bundles/SurvosTreeBundle"}'
composer req survos/tree-bundle:*@dev && git diff config

composer config repositories.foo '{"type": "path", "url": "/home/tac/survos/bundles/FooBundle"}'
composer req survos/foo-bundle:*@dev

composer config repositories.barcode '{"type": "vcs", "url": "git@github.com:survos/BarcodeBundle"}'

composer config repositories.barcode '{"type": "path", "url": "/home/tac/survos/bundles/BarcodeBundle"}'
composer req survos/barcode-bundle:*@dev && git diff config
composer req survos/barcode-bundle && git diff config


#git checkout . && composer req knpuniversity/lorem-ipsum-bundle:*@dev && git diff config



composer config repositories.lorum '{"type": "vcs", "url": "git@github.com:tacman/lorem-ipsum-bundle.git"}'

composer config repositories.lorum '{"type": "path", "url": "/home/tac/survos/bundles/lorem-ipsum-bundle"}'
git checkout . && composer req knpuniversity/lorem-ipsum-bundle:*@dev && git diff config


composer config repositories.knp_dictionary '{"type": "vcs", "url": "git@github.com:tacman/DictionaryBundle.git"}'

composer config extra.symfony.endpoint --json '["/home/tac/survos/bundles/recipes/index.json","https://api.github.com/repos/survos/recipes/contents/index.json", "flex://defaults"]'

composer config repositories.knp_markdown '{"type": "vcs", "url": "git@github.com:tacman/KnpMarkdownBundle.git"}'
composer req knplabs/knp-markdown-bundle:dev-symfony6

composer config repositories.survos_grid_bundle '{"type": "vcs", "url": "git@github.com:survos/SurvosGridBundle.git"}'
composer config repositories.survos_base_bundle '{"type": "vcs", "url": "git@github.com:survos/BaseBundle.git"}'
composer config repositories.ux-datatable '{"type": "vcs", "url": "git@github.com:tacman/ux-datatable.git"}'
composer req tacman/ux-datatable

composer require umbrella2/adminbundle
php bin/console make:admin:home

composer config repositories.cs_fixer '{"type": "vcs", "url": "git@github.com:tacman/PHP-CS-Fixer.git"}'
composer config repositories.survos_workflow '{"type": "vcs", "url": "git@github.com:survos/workflow-bundle.git"}'
composer config repositories.tabler '{"type": "vcs", "url": "git@github.com:survos/TablerBundle.git"}'
composer req survos/tabler-bundle:dev-tac

composer req survos/base-bundle:"^2.0.3"

composer require symfony/webpack-encore-bundle
yarn install
yarn add sass-loader@^11.0.0 sass --dev
yarn add https://github.com/survos/adminkit.git

#echo '@import "~bootstrap/dist/css/bootstrap.min.css";' > assets/styles/app.scss
#echo '@import "../../public/bundles/survosbase/volt-dist/css/volt.css";' >>assets/styles/app.scss
## FIRST, initialize SurvosBase, which creates app.scss.  Then fix webpack.

sed -i "s|//.enableSassLoader()|.enableSassLoader()|" webpack.config.js
sed -i "s|import './styles/app.css';|import './styles/app.scss';|" assets/js/app.js

yarn install

yarn add "@symfony/webpack-encore@^1.0.0"
yarn add "@symfony/stimulus-bridge@^2.0.0"
yarn add bootstrap@next

yarn add datatables.net-bs5 datatables.net-buttons-bs5 datatables.net-scroller datatables.net-scroller-bs5 datatables.net-select-bs5 datatables.net-searchpanes datatables.net-searchpanes-bs5 datatables.net-colreorder datatables.net-colreorder-bs5

仅限 Survos 开发人员

composer config repositories.knp_dictionary '{"type": "path", "url": "/home/tac/survos/bundles/DictionaryBundle"}' composer config repositories.ux_datatables '{"type": "path", "url": "/home/tac/survos/bundles/ux-datatable"}' composer config repositories.survos_workflow '{"type": "path", "url": "/home/tac/survos/bundles/WorkflowBundle/"}'

composer config repositories.tacman_twig_tree '{"type": "path", "url": "/home/tac/survos/bundles/twig-tree-tag/"}' COMPOSER_DISABLE_NETWORK=1 composer req jordanlev/twig-tree-tag:*@dev

composer config repositories.survos_workflow '{"type": "vcs", "url": "git@github.com:survos/workflow-bundle.git"}' composer config repositories.kickass_subtitles '{"type": "vcs", "url": "git@github.com:tacman/open-subtitles.git"}'

composer config repositories.survos_base_bundle '{"type": "path", "url": "../Survos/BaseBundle"}' composer config repositories.geonames '{"type": "path", "url": "../Survos/geonames-bundle"}' composer config repositories.phpspreadsheet '{"type": "path", "url": "../Survos/phpspreadsheet-bundle"}'

@TODO: recipes!

composer config repositories.multisearch '{"type": "vcs", "url": "git@github.com:tacman/PetkoparaMultiSearchBundle.git"}'

repositories.captcha '{"type": "vcs", "url": "git@github.com:cyrilverloop/symfony-captcha-bundle.git"}'

composer config repositories.git-survosbase '{"type": "vcs", "url": "https://github.com/survos/BaseBundle.git"}'

composer config repositories.git-geonames '{"type": "vcs", "url": "https://github.com/survos/geonames-bundle.git"}'

composer config repositories.flowdemo '{"type": "path", "url": "../Survos/../CraueFormFlowDemoBundle"}'


composer config repositories.social_post_bundle '{"type": "path", "url": "../Survos/social-post-bundle"}'

composer config repositories.social_post_bundle '{"type": "vcs", "url": "https://github.com/tacman/social-post-bundle"}'

# this is needed because it creates MAILER_DSN, which isn't created otherwise
# composer req mail
composer req knplabs/knp-menu-bundle:"^3.0@dev"

composer req survos/base-bundle:"*@dev"
phpstorm .env

OR

第一步:通过Survos Init初始化Yarn包

# creates survos_base.yaml (a recipe would be nicer!)    
bin/console survos:init

# edit .env and set MAILER_URL

糟糕,仍然不起作用,需要基本菜单

# introspection, creates menus, looks for entities, easyadmin, etc.
bin/console survos:configure
 
# symfony run -d yarn encore dev --watch

整合Facebook和其他OAuth

访问 https://github.com/knpuniversity/oauth2-client-bundle#step-1-download-the-client-library

例如:

composer require league/oauth2-facebook

创建应用并启用登录: https://developers.facebook.com/apps/

需要一个配置脚本,询问ID并将其设置在.env.local(或Heroku等)中

https://developers.facebook.com/apps/558324821626788/settings/basic/

安装和配置UserBundle(可选)

见 [docs/recommended_bundles]

如果开发BaseBundle

composer config repositories.survosbase '{"type": "path", "url": "../Survos/BaseBundle"}'
composer req survos/base-bundle:"*@dev"

正常安装

安装包,然后通过设置添加和配置工具。

composer req survos/base-bundle

yarn install 

xterm -e "yarn run encore dev-server" &

composer req "kevinpapst/adminlte-bundle"
composer require knplabs/knp-menu-bundle
bin/console make:subscriber KnpMenuSubscriber "Survos\BaseBundle\Event\KnpMenuEvent"

bin/console survos:init



bin/console survos:config --no-interaction
bin/console doctrine:schema:update --force

survos:init

首次设置,下载jquery,bootstrap等。同时 修改 一些yaml文件,并创建第一个菜单。

# config/packages/admin_lte.yaml
admin_lte:
    knp_menu:
        enable: true

    routes:
        adminlte_welcome: app_homepage
        adminlte_login: app_login
        adminlte_profile: app_profile

@todo: 生成此控制器和模板?

# config/routes/survos_base.yaml
survos_base: {path: /, controller: 'Survos\BaseBundle\Controller\BaseController::base'}
# app_homepage: {path: /, controller: 'Survos\BaseBundle\Controller\LandingController::base'}
app_logo: {path: /logo, controller: 'Survos\BaseBundle\Controller\BaseController::logo'}
app_profile: {path: /profile, controller: 'Survos\BaseBundle\Controller\BaseController::profile'}
# profile: {path: /profile, controller: 'Survos\BaseBundle\Controller\LandingController::profile'}
# logout: {path: /logout, controller: 'Survos\BaseBundle\Controller\LandingController::logout'}
# required if app_profile is used, since you can change the password from the profile
app_change_password: {path: /change-password, controller: 'Survos\BaseBundle\Controller\BaseController::changePassword'}

{% extends '@SurvosBaseBundle/layout/default-layout.html.twig' %} {% block page_content %} {{ block('body') }} {% endblock %}

{% block logo_mini %}KPA{% endblock %} {% block logo_large 'KPA Admin' %}

{% block page_title 'KPA Admin' %} {% block page_subtitle '歌曲和音乐!' %}

2021目标:移除jQuery

https://tobiasahlin.com/blog/move-from-jquery-to-vanilla-javascript/

使用vue或react代替。 https://www.smashingmagazine.com/2020/07/desktop-apps-electron-vue-javascript/k

现在安装一些包!

See the details at [Recommended Bundles](docs/recommended-bundles.md)

如果选择集成userbundle,更新模式并添加管理员

bin/console doctrine:schema:update --force

symfony server:start --no-tls

完成后,应用程序将有一个基本的首页,包括顶部导航,可选地包括登录/注册页面。具有ROLE_ADMIN角色的登录用户还将(可选地)有访问easyadmin和api-platform的链接。

Api Platform

@todo: 将此放入survos:setup命令中。

  • 公开API路由(对于jsRoutingBundle),并
# config/routes/api_platform.yaml
api_platform:
    resource: .
    type: api_platform
    prefix: /api
    options:
        expose: true

创建resources.yaml以存储配置

# api/config/api_platform/resources.yaml
App\Entity\User: ~
App\Entity\Location:
  shortName: 'Location'                   # optional
  description: 'A place within a building where inventory item is physically located.' # optional
  attributes:                          # optional
    pagination_items_per_page: 30   # optional
    normalization_context:
      groups: ['jstree']
    denormalization_context:
      groups: ['jstree']

将resources.yaml目录添加到映射路径中

# config/packages/api_platform.yaml
api_platform:
    mapping:
        paths:
            - '%kernel.project_dir%/src/Entity'
            - '%kernel.project_dir%/config/api_platform' # yaml or xml directory configuration]
    patch_formats:
        json: ['application/merge-patch+json']
    swagger:
        versions: [3]

配置序列化器(可能需要创建目录)

# config/serializer/serialization.yaml
App\Entity\User:
  attributes:
    id:
      groups: ['Default']
    email:
      groups: ['Default']

App\Entity\Song:
  attributes:
    title:
      groups: ['Default']

自定义包

部署到heroku

heroku create $projectName 
heroku buildpacks:add heroku/php
heroku buildpacks:add heroku/nodejs

echo "web:  vendor/bin/heroku-php-nginx -C heroku-nginx.conf  -F fpm_custom.conf public/" > Procfile

heroku buildpacks:add heroku/nodejs
heroku buildpacks:add --index 2 heroku/nodejs


composer config --unset repositories.survosbase && composer update
git commit -m "unset survosbase" . && git push heroku master

https://devcenter.heroku.com/articles/deploying-symfony4 bin/console survos:setup-heroku

替代方案

https://github.com/xriley/portal-theme-bs5