Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 表单实体:添加额外选项_Php_Symfony_Doctrine Orm_Symfony Forms - Fatal编程技术网

Php 表单实体:添加额外选项

Php 表单实体:添加额外选项,php,symfony,doctrine-orm,symfony-forms,Php,Symfony,Doctrine Orm,Symfony Forms,我使用Symfony表单过滤一组数据。比如说,有一个“用户”下拉列表过滤日志记录表(每个记录可以与用户链接,但不能链接) 换句话说,LogRecord用户 关键是我希望它支持下拉列表中的两个选项:所有用户(禁用此字段过滤)和“无用户”,这两个选项应该过滤字段为NULL的记录。但我不知道如何学习表单来区分这些情况,而不是破坏表单验证过程。有什么想法吗 public function buildForm(FormBuilderInterface $builder, array $options) {

我使用Symfony表单过滤一组数据。比如说,有一个“用户”下拉列表过滤日志记录表(每个记录可以与用户链接,但不能链接)

换句话说,
LogRecord用户

关键是我希望它支持下拉列表中的两个选项:所有用户(禁用此字段过滤)和“无用户”,这两个选项应该过滤字段为NULL的记录。但我不知道如何学习表单来区分这些情况,而不是破坏表单验证过程。有什么想法吗

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->setMethod('GET');

    $builder
        ->add('user', EntityType::class, array(
            'class' => 'AppBundle:User',
            'choice_label' => 'name',
            'placeholder' => 'All',
            'query_builder' => function (UserRepository $repo) {
                return $repo->findForOptionsQueryBuilder();
            },
            'label' => 'User',
            'required' => false,
        ));
}
当前下拉列表:

  • 全部
  • 用户1
  • 用户2
所需下拉列表:

  • 全部
  • 无(空)
  • 用户1
  • 用户2

    • 一个想法是使用
      选择类型。大概是这样的:

      // all your users
      $choices = $repo->findForOptionsQueryBuilder()->getQuery()->getResult();
      
      // add None option
      $choices = array_merge(['None' => 0], $choices);
      
      $builder->add('user', ChoiceType::class, [
          'choices' => $choices,
          'placeholder' => 'All', // add All option to beginning
          'required' => false,
          'choice_label' => function ($value, $key) {
              return $value ?: $key;
          },
      ]);
      
      这将呈现以下HTML输入:

      <select id="form_user" name="form[user]">
          <option value="">All</option>
          <option value="0">None</option>
          <option value="1">User A</option>
          <option value="2">User B</option>
          <option value="3">User C</option>
      </select>
      
      
      全部的
      没有一个
      用户A
      用户B
      用户C
      
      在提交活动时:

      • 如果选择了选项“All”,则
        $form->get('user')->getData()
        等于
        null
      • 如果选择了选项“无”,则
        $form->get('user')->getData()
        等于
        0
      • 如果选择了选项“用户A”,则
        $form->get('User')->getData()
        User

      因此,您可以在不中断表单验证过程的情况下区分这些情况。

      我不知道这是否有帮助,但请尝试允许外部字段。如果传递的值为“null”,我最终会在预提交事件处理程序中将EntityType表单元素替换为ChoiceType。