【问题标题】:Drupal 8 Routing - Parameters to _controllerDrupal 8 路由 - _controller 的参数
【发布时间】:2015-08-08 16:46:51
【问题描述】:
my_module.content:
路径:'/admin/my_module/{method}'
默认值:
_controller: '\Drupal\my_module\Controller\MyModuleController::%{method}' // 不工作
如何向 _controller 发送参数?在控制器的方法之间切换
谢谢!
【问题讨论】:
标签:
drupal
controller
routing
drupal-8
【解决方案1】:
在路由中你有这样的东西
example.content:
path: '/example'
defaults:
_controller: '\Drupal\example\Controller\ExampleController::content'
requirements:
_permission: 'access content'
从 URL 中提供参数:
添加一个你想稍后在控制器中接收的变量。
注意:路径:'/example/{id_param}'
example.content:
path: '/example/{id_param}'
defaults:
_controller: '\Drupal\example\Controller\ExampleController::content'
requirements:
_permission: 'access content'
现在,在控制器中:
你会有这样的东西
function content($id_param) {
echo($id_param);
}
这会打印您传递给 URL 的任何内容。例如 yourdrupalsite.com/example/1920
打印
1920
【解决方案2】:
将参数传递给表单:
MODULE_NAME.contactform_results:
path: '/contactform/results/{PARAMETER}'
defaults:
_title: 'Contact Form Submissions'
_form: '\Drupal\MODULE_NAME\Form\TicketSendingForm'
requirements:
_permission: 'access control'
然后在表单构建器函数中
public function buildForm(array $form, FormStateInterface $form_state, $PARAMETER = null) {
echo ($PARAMETER);
}
【解决方案3】:
如果您想将参数转换为实体(fx. 一个 ID),请注意该参数不能有下划线 - 或者使用驼峰式。
example.entity:
path: '/entity/{entityName}'
defaults:
_controller: '\Drupal\example\Controller\ExampleController::content'
requirements:
_permission: 'access content'
options:
parameters:
entityName:
type: entity:entity_name