survos / base-bundle
为 Symfony 6 应用程序添加一些工具和资源
Requires
- php: >= 8.0
- ext-json: *
- ext-zip: *
- api-platform/core: ^2.6
- doctrine/common: ^2.0|^3.0
- knplabs/knp-menu: ^3.0
- knplabs/knp-menu-bundle: ^3.0
- knpuniversity/oauth2-client-bundle: ^v2.10.0
- mindscreen/yarnlock: ^1.0
- sensio/framework-extra-bundle: ^6.2
- survos/core-bundle: ^1.0
- symfony/config: >= 5.4
- symfony/form: >= 5.4
- symfony/mailer: *
- symfony/maker-bundle: ^1.36
- symfony/options-resolver: >= 5.4
- symfony/password-hasher: ^6.1
- symfony/process: >= 5.4
- symfony/routing: ^6.0
- symfony/security-bundle: ^6.0
- symfony/security-csrf: >= 5.4
- symfony/security-http: >= 5.4
- symfony/string: >= 5.4
- symfony/twig-bundle: >= 5.4
- symfony/validator: >= 5.4
- symfony/webpack-encore-bundle: ^v1.13.1
- symfony/workflow: >= 5.4
- symfony/yaml: *
- twig/twig: ^3.3
- umbrella2/adminbundle: ^6.1
Requires (Dev)
- doctrine/doctrine-fixtures-bundle: ^3.0
- meyfa/php-svg: ^0.11.2
- phpstan/phpstan: ^1.7
- rector/rector: ^0.12.4
- slevomat/coding-standard: ^7.0
Suggests
- monolog/monolog: Great logger to use, but you can pick any PSR-3 logger you wish.
- php-http/cache-plugin: When making use of cache, you need to install this plugin.
- psr/cache-implementation: If you wish to enable caching features, provide an PSR-6 cache implementation.
- psr/log-implementation: If you wish to enable logging features, provide an PSR-3 logger.
- psr/simple-cache-implementation: If you wish to enable caching features, provide an PSR-16 cache.
- symfony/cache: Great cache to use, but you can pick any PSR-6 cache you wish.
- twig/markdown-extra: use markdown_to_html filter
- zenstruck/foundry: for easily creating fixtures
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 项目
-
创建一个新仓库,如果与 Heroku 集成,请使用小写
在 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