gpt4 book ai didi

php - Symfony:如何从 FormType 中的路由获取参数?

转载 作者:可可西里 更新时间:2023-11-01 00:19:06 26 4
gpt4 key购买 nike

我正在尝试从 FormType 中的当前路由访问参数 page。它适用于 Controller,但不适用于 FormType。我想避免传递像 /?page=1 这样的参数,而更喜欢 /page/1

路由.yml

my_route:
path: /data/page/{page}
defaults:
_controller: MyBundle:MyController:myAction

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

// ...
}
}

我想避免通过 Controller 将参数传递给 FormType,而更喜欢直接在 FormType 中访问它。

有什么想法吗?

提前致谢!

编辑:关于选择的答案; page attribute 可以通过 $request->attributes->get('page') 访问,而不是通过 $request-> query->get('page').

最佳答案

我不确定 Yonel 提供的答案是最好的,因为您向表单注入(inject)了依赖项。它有一些缺点,恕我直言,主要的缺点是它会使测试变得困难,因为隐藏了对页面参数的依赖。

更好的解决方案是将其作为表单选项添加到您的表单中。

请求对象已经在你的 Controller 中可用,你可能正在以这种方式创建你的表单:

$form = $this->createForm(WhateverFormType::class, $entity)

使用 createForm 方法,您可以注入(inject)第三个参数,这是您要传递给表单的选项(即附加数据)。

所以在你的 Controller 中:

$page = $request->query->get('page');
$form = $this->createForm(WhateverFormType::class, $entity, ['page' => $page]);

在您的表单类型中,请按照此答案中针对同一问题给出的示例进行操作:https://stackoverflow.com/a/10922788/2721918

关于php - Symfony:如何从 FormType 中的路由获取参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39494949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com