通过在模块目录下创建 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()
方法。
- Class::method: 格式:
- _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
- _controller: Callable 类型,可通过以下方法实现映射
- 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: *暂无说明*
- _permission: 指定的权限可以访问路由(权限通过
- 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: 详见 路由参数
- _access_mode