.routing.yml 完整属性与说明 [TBD]

通过在模块目录下创建 module_name.routing.yml 来定义路由信息,每条路由以 module_name.route_name 格式表示,且可以包含以下属性。

  • path (必填): 以正斜杠开头的 URL 路径(如: path: '/book' )。
    • 可使用大括号表示动态参数(如: path: '/node/{node}/outline' ),参数会通过参数转换器转换后传到 controller 或 form 属性对应的方法
    • 路由第一部分不能设为参数且必须为字符串
    • 路径最后一部分可以设为可选参数(详见《路由参数
  • defaults (必填): 定义路由的默认属性,可以从以下属性中任选一种对应的输出形式。
    • _controller: Callable 类型,可通过以下方法实现映射
      • Class::method: 格式: \Drupal\[module_name]\Controller\[ClassName]::[method]
        示例: _controller: '\Drupal\acme\Controller\AcmeController::build'

        以上表示访问路由时执行 \Drupal\acme\Controller  命名空间下 AcmeController  类中的 build()  方法。注意:
        • 以上是 PSR-4 命名空间,不是文件系统路径。
        • 使用小写的模块机器名
        • 使用驼峰格式类名
      • Service: 格式: [service_name].[method] ,service 定义于 *.services.yml  文件中
        示例: _controller: 'acme.controller:build'

        以上表示访问路由时执行 acme.services.yml  文件中定义的 acme.controller  服务的 build()  方法。
    • _form: 实现 Drupal\Core\Form\FormInterface 的类。详见 Drupal 8 Form API
    • _entity_view: 格式:entity_type.view_mode 对应值。此设置将从路径中找到对应实体并渲染为指定的查看模式。例如 _entity_view: node.teaser 将以 teaser(摘要)形式显示 {node} 对应的节点。
    • _entity_list: 格式:entity_type。使用 EntityListController 提供实体列表。例如 _entity_list: view_mode 返回查看模式的列表数组。
    • _entity_form: 与表单类似,但对应的是实体的编辑表单。例如 _entity_form: node.default 将显示默认 node 表单,node 为实体ID,default 为表单 handler 键。表单 handler 定义在实体的元数据(annotation 注解)中。
    • _route: 为其它路由提供别名,如 view.files.page_1
  • defaults (可选)
    • _title: 路由对应的页面标题
    • _title_arguments: 将传给 t() 函数的标题参数
    • _title_context: 将传给 t() 函数的标题上下文
    • _title_callback: 使用 callback 类型(通常为 classname::method)返回动态标题
  • requirements (必填):
    • _permission: 指定的权限可以访问路由(权限通过 module_name.permissions.yml 文件进行定义)。示例:
      • 单一权限可访问:_permission: 'access content'
      • 任一权限可访问(OR): _permission: 'access content+access user profile'
      • 同时有多个权限才可访问(AND):_permission: 'access content,access user profiles'
    • _role: 指定的用户角色可以访问路由(因为每个站点的角色并不相同,在可能时尽量使用 _permission 进行访问控制)。示例:
      • 单一角色可访问:_role: 'administrator
      • 任一角色可访问:_role: 'administrator+organizer
      • 同时有多个角色才可访问:_role: administrator,organizer
    • _access: 设置为 _access: 'TRUE' 表示路由始终可访问(注意使用单引号)
    • _entity_access: 当路由中包含实体时,可以以进行实体层面的访问控制(例如:_entity_access: 'node.view',格式为 [paramter].[operation])。另外也可以对实体参数格式进行校验(如 node: \d+),以 /foo/{node} 路径为例,/foo/1 可通过校验,而 /foo/bar 无法通过。
    • _entity_create_access: 检查是否有创建实体的权限
      • 参考:https://www.drupal.org/node/1982078
    • _custom_access: 使用自定义访问控制方法
    • _format: 检查请求格式,如 _format: json
      • 参考:
    • _content_type_format:
    • _module_dependencies:
    • _csrf_token:
    • _csrf_request_header_token:
    • _method:
    • _access_user_register: *暂无说明*
    • _user_is_logged_in: 布尔值,指明用户必须登录或未登录
    • user: *暂无说明*
  • methods (可选): 指定请求类型(如 GET, HEAD, POST, PUT, DELETE),使用中括号包裹,逗号分割,如 method: [GET, HEAD]
  • options (可选):
    • _access_mode:已废弃
    • _admin_route: 标示是否是管理路由,以便使用管理主题。以 /admin 开头的路径已默认将此属性设置为 'TRUE‘
    • _auth: 设置默认认证机制(如 _auth: ['basic_auth', 'cookie'])。
    • _maintenance_access: 设置为 'TRUE' 允许在维护模式下访问。
    • _theme: *暂无说明*
    • no_cache: 设置为 'TRUE' 将不缓存此路由响应结果。
    • paramaters: 详见 路由参数