我正在尝试page从中的当前路由访问参数FormType。它适用于Controller,但不适用于FormType。我想避免传递like /?page=1和preferred 参数/page/1。
routing.yml
my_route:
path: /data/page/{page}
defaults:
_controller: MyBundle:MyController:myAction
Run Code Online (Sandbox Code Playgroud)
src / myBundle / Form / Type / MyFormType.php
class MyFormType extends AbstractType {
// ...
public function buildForm(FormBuilderInterface $builder, array $options) {
$request = Request::createFromGlobals();
$page = $request->query->get('page');
echo "page: $page"; // empty
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我想避免将参数通过Controller传递给FormType,而是希望直接在FormType中访问它。
有任何想法吗?
提前致谢!
编辑:
关于所选答案;该page 属性是通过访问$request->attributes->get('page'),而不是通过$request->query->get('page')。
小智 5
我不确定Yonel提供的答案是最好的,因为您向表单注入了依赖性。它有一些缺点,主要的恕我直言是,由于隐藏了对page参数的依赖性,这将使测试变得困难。
更好的解决方案是将其作为表单选项添加到表单中。
该请求对象已经在您的控制器中可用,您可能是通过以下方式创建表单的:
$form = $this->createForm(WhateverFormType::class, $entity)
Run Code Online (Sandbox Code Playgroud)
使用createForm方法,您可以注入第三个参数,这是要传递给表单的选项(即其他数据)。
因此,在您的控制器中:
$page = $request->query->get('page');
$form = $this->createForm(WhateverFormType::class, $entity, ['page' => $page]);
Run Code Online (Sandbox Code Playgroud)
然后在您的表单类型中,针对相同的问题,按照此答案中给出的示例进行操作:https : //stackoverflow.com/a/10922788/2721918
| 归档时间: |
|
| 查看次数: |
1623 次 |
| 最近记录: |