marcin-jozwikowski / easy-admin-pretty-urls
EasyAdmin中用于生成漂亮REST样式的URL的半自动URL生成器
Requires
- php: >=8.0
- easycorp/easyadmin-bundle: ^4.8.10
- symfony/framework-bundle: ^5.4|^6.0|^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.13
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9
README
引入可定制路由到EasyAdmin的Symfony Bundle
示例
将
http://ea-demo.loc/en/easyadmin?crudAction=index&crudControllerFqcn=App%5CController%5CEasyAdmin%5CPostCrudController
转换为
http://ea-demo.loc/en/post_crud/index
安装
-
通过运行以下命令安装包:
composer require marcin-jozwikowski/easy-admin-pretty-urls
-
如果未自动启用,请通过将其添加到您的
config/bundles.php
文件来启用该包return [ // ... MarcinJozwikowski\EasyAdminPrettyUrls\EasyAdminPrettyUrlsBundle::class => ['all' => true], ];
-
添加一个指向包含您的控制器的目录的路由集
pretty_routes_name: resource: 'src/Controller' type: 'pretty_routes'
resource
是相对于您项目根目录的目录路径。类型必须始终等于pretty_routes
。有关如何省略此步骤的信息,请参阅 微调 / 手动定义路由 部分。也可以利用其他路由结构,例如
pretty_routes: resource: 'src/Controller' type: 'pretty_routes' prefix: /{_locale} requirements: _locale: '%app_locales%' defaults: _locale: '%locale%'
-
让您的主 DashboardController 继承
\MarcinJozwikowski\EasyAdminPrettyUrls\Controller\PrettyDashboardController
或手动覆盖默认模板,如下所示public function configureCrud(): Crud { return parent::configureCrud() ->overrideTemplate('layout', '@EasyAdminPrettyUrls/layout.html.twig') ->overrideTemplate('crud/field/association', '@EasyAdminPrettyUrls/crud/field/association.html.twig'); }
配置
以下参数正在使用中
要更改默认值,请在您的 services.yaml
文件中设置参数
parameters: easy_admin_pretty_urls.<parameter>: '<new_value>'
或者创建一个 config/packages/easyadmin_pretty_urls.yaml
文件,包含以下内容:
easy_admin_pretty_urls: <parameter>: '<new_value>'
Twig
该Bundle中的Twig扩展注册了一个函数和一个过滤器
pretty_urls_include_menu_index()
函数返回配置中的include_menu_index
值|pretty_urls_remove_actions
过滤器从URL字符串中删除不必要的查询元素
微调
-
定义自定义URL路径
默认情况下,URL创建为
<class_name>/<action_name>
。要更改此行为,请指定
PrettyRoutesController
属性中的path
值,针对整个控制器,以及/或针对特定操作的PrettyRoutesAction
属性。以下配置将导致
special/list
动作URL,而不是默认的any_fancy/index
。#[PrettyRoutesController(path: 'special')] class AnyFancyController { #[PrettyRoutesAction(path: 'list')] public function index() { // .... } }
-
在路径中放置实体ID
通过在
#PrettyRoutesAction
属性中定义自定义路径,可以将实体ID包含在路径中。为此,只需将
{entityId?0}
添加到path
参数即可,即#[PrettyRoutesAction(path: 'modify/{entityId?0}')] public function edit(AdminContext $context) { return parent::edit($context); }
由于EasyAdmin生成表单操作的方式,有必要在路径中指定参数的默认值。
它不必是
0
,但请注意,将其设置为现有ID将使应用程序无法使用。 -
选择要创建路由的动作
默认情况下,漂亮路由生成用于
index
、new
、detail
、edit
、delete
、batchDelete
、renderFilters
和autocomplete
动作。要全局更改它们,请设置适当的 配置 值。对于单个控制器的更改,向控制器添加
PrettyRoutesController
属性,并在actions
参数中指定您希望具有漂亮路由的动作。#[PrettyRoutesController(actions: ['index', 'foo', 'bar'])] class AnyFancyController { // ... } /** * You can also (optionally) specify your own dashboard controller if you're using more than one in your project. * This will avoid to have an incorrect sidebar/user menu by addressing the request to the right dashboard controller */ #[PrettyRoutesController(actions: ['index', 'foo', 'bar'], dasboard: YourCrudController::class . '::yourCrudAction')] class AnyFancyController { // ... }
您还可以通过在
PrettyRoutesController
属性中指定customActions
来仅将您自己的自定义动作添加到默认列表中。#[PrettyRoutesController(customActions: ['foo', 'bar'])] class AnyFancyController { ...
-
手动定义路由
除了定义
pretty_routes
路由来自动解析目录中的所有类,您还可以创建将替换默认EasyAdmin CRUD动作的路由。pretty_foobar_index: path: /foobar-url controller: \App\Controller\EasyAdmin\DashboardController::index defaults: crudControllerFqcn: \App\Controller\FoobarCrudController crudAction: index
controller
值必须指向您项目中的 DashboardControllerdefaults
crudControllerFqcn
和crudAction
必须指向您的目标CRUD控制器及其动作。path
可以是您选择的任何内容- 路由名称必须符合
<prefix>_<name>_<action>
的模式,其中<action>
等于默认值中的crudAction
值<name>
是目标控制器类的名称(不是完全限定名 FQCN - 只是最后一部分),去除了Controller
,采用 snake_case 格式<prefix>
默认设置为pretty
。请参阅配置部分了解如何更改它。
- 当手动定义路由时,无需执行 安装步骤 3。
您可以通过运行以下命令为现有控制器生成 YAML 路由配置,以进行进一步的手动修改:
bin/console pretty-routes:dump <resource>