跳转到主要内容
ryerh 提交于 8 October 2014

Drupal8 的路由支持占位符,该占位符将被 URL 中的动态值替代。这个占位符可以在控制器的方法中直接当作一个同名变量使用。比如 example.routing.yml的这个例子:

example.name:
  path: 'example/{name}'
  defaults:
    _content: '\Drupal\example\Controller\ExampleController::content'
  requirements:
    _permission: 'access content'

这个 {name}占位符是 URL 里的一个别名,在控制器方法中可以被当作 $name变量使用,如下:

<?php
class ExampleController {  
  // ...
  public function content($name) {
    // name 是一个字符串值
    // 处理 $name 包含的内容
  }
}
?>

通常在 PHP 代码中变量取什么名字无关紧要,但在这儿情况就不一样了:方法的参数表中的变量名必须和占位符保持一致。如果参数名和占位符别名一样,那么值就会被传递进来,参数的顺序可以随意。

参数自动转换

当在 URL 中使用节点 ID 时,ID 会被“参数转换系统”自动转换为节点对象。详情请参看 Parameter upcasting in routes