php - 交响乐 3 : Passing variables into forms

标签 php forms symfony entities

我正在使用 Symfony 3 Forms 构建,并且需要在表单中检索依赖于当前用户的集合以在下拉列表中呈现。

使用 EntityType 我可以检索所有实体的列表,但我希望能够运行自定义查询,该查询仅检索与当前用户对象有关系的实体。

我已阅读有关表单和 EntityType 的文档,其中解释了自定义查询并提到将集合作为参数传递。但我在任何地方都找不到关于如何实现这一点的说明。

理想情况下,我想传入一个我在 Controller 中策划的集合,传入用户对象以在表单内运行查询,或者以其他方式访问表单中的用户 ID 以运行查询.

有没有人找到类似的解决方案?

最佳答案

你应该试试

pass in the User object to run the query inside the Form

  1. options resolver 中定义必需的参数user :

    public function configureOptions(OptionsResolver $resolver)
    {
        // ...
        $resolver->setRequired('user');
        // type validation - User instance or int, you can also pick just one.
        $resolver->setAllowedTypes('user', array(User::class, 'int'));
    }
    

它会强制您传递 user 选项,这样您就不会忘记它。

  1. 将用户实例或用户 ID 作为选项传递到表单中。

在 Controller 中它可能看起来像这样:

$this->createForm(SomeFormType::class, $underlyingObjectOrNull, array(
    'user' => $this->getUser(),
));
  1. 构建一个 custom query for EntityType领域:

    $user = $options['user'];
    $builder->add('someField', EntityType::class, array(
        'class' => 'AppBundle:SomeEntity',
        'query_builder' => function (EntityRepository $er) use($user) {
            return $er->createQueryBuilder('u')
               //.. -> some method building the query builder
        },
    ));
    

请注意 use($user) 部分,它使您可以在匿名函数中访问此变量。

关于php - 交响乐 3 : Passing variables into forms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43092246/

相关文章:

php - fatal error :registerContainerConfiguration 的声明必须与 Kernel::registerContainerConfiguration 的声明兼容

php修改密码脚本问题

php - 用于解析YouTube嵌入式代码的正则表达式

php - 如何使用 $_SERVER 变量的路径,修改它并将其分配给 PHP 中的某个变量?

Django 表单 ChoiceField

php - 在 ubuntu 中将 symfony 命令作为服务运行

mysql - 在 mySQL/Mongo 或 Postgres 中存储 JSON 元数据

php - Laravel 如何验证一行中的数据,而不是检查整个表

javascript - 下一个和上一个按钮表单流程的 HTML 表单验证

delphi - Delphi 是否提供用于表单创建通知的事件处理程序?