动态路由,即'/node/{node}/edit'这样的路径。
官方文档:Structure of routes
例子:my_module.routing.yml
round_robin.content:
path: '/node/{node}/round-robin'
defaults:
_controller: '\Drupal\round_robin\Controller\RoundRobinController::content'
_title_callback: '\Drupal\round_robin\Controller\RoundRobinController::title'
requirements:
_entity_access: 'node.update'
node: ^\d+$
options:
parameters:
node:
type: 'entity:node'
简单解释:
_controller :对应模块controller里的显示内容function
_title_callback:对应模块controller里的显示标题function
_entity_access: 'node.update':要求当前用户对该节点有编辑的权限
node: ^\d+$:表示{node}只能是数字
options: parameters: node: type: 'entity:node':这个官方文档没提及,但必须有,大概是表示{node}是个参数,而且要是个node entity。
更进一步,如何定义某个node type的动态路由?
上面的例子:/node/{node}/round-robin,会对所有node添加这个路由;但如果我只针对某个node type才添加这个路由呢?譬如说:node/1 是个ariticle,node/2是个page,我只想node/1/round-robin有效。这时,就要在代码中requirements下添加_custom_access
requirements:
_custom_access: '\Drupal\mymodule\Controller\CheckTestController::checkAccess'
通过模块中的checkAccess()检测entity type是否article,并返回true/false。
更多链接:
Route access check for local task
评论