marcin-jozwikowski/easy-admin-pretty-urls

EasyAdmin中用于生成漂亮REST样式的URL的半自动URL生成器

v2.9.2 2024-08-14 13:58 UTC

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

安装

  1. 通过运行以下命令安装包:

    composer require marcin-jozwikowski/easy-admin-pretty-urls
  2. 如果未自动启用,请通过将其添加到您的 config/bundles.php 文件来启用该包

    return [
      // ...
      MarcinJozwikowski\EasyAdminPrettyUrls\EasyAdminPrettyUrlsBundle::class => ['all' => true],
    ];
  3. 添加一个指向包含您的控制器的目录的路由集

    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%'
  4. 让您的主 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将使应用程序无法使用。

  • 选择要创建路由的动作

    默认情况下,漂亮路由生成用于 indexnewdetaileditdeletebatchDeleterenderFiltersautocomplete 动作。

    要全局更改它们,请设置适当的 配置 值。对于单个控制器的更改,向控制器添加 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 值必须指向您项目中的 DashboardController
    • defaults crudControllerFqcncrudAction 必须指向您的目标CRUD控制器及其动作。
    • path 可以是您选择的任何内容
    • 路由名称必须符合 <prefix>_<name>_<action> 的模式,其中
      • <action> 等于默认值中的 crudAction
      • <name> 是目标控制器类的名称(不是完全限定名 FQCN - 只是最后一部分),去除了 Controller,采用 snake_case 格式
      • <prefix> 默认设置为 pretty。请参阅配置部分了解如何更改它。
    • 当手动定义路由时,无需执行 安装步骤 3

    您可以通过运行以下命令为现有控制器生成 YAML 路由配置,以进行进一步的手动修改:

      bin/console pretty-routes:dump <resource>

故障排除

  • 路由无效

    尽管已添加,但您的路由仍未生成,请检查您的日志中是否有 'Pretty route not found'debug 级别记录。这些记录将列出所有未找到其对应美化版本(pretty counterpart)的 EasyAdmin 路由。

    很可能存在一些命名不匹配的问题。

  • 检查资源解析结果

    要查看解析 pretty_routes 资源的结果,请运行以下命令

      bin/console pretty-routes:debug <resource>