【问题标题】:Entity field type custom query parameter实体字段类型自定义查询参数
【发布时间】:2012-01-27 13:37:03
【问题描述】:

我想在 Symfony 2 中构建一个 Entity 字段类型并将参数传递给查询构建器以获取相关对象的过滤器列表:

$formMapper
            ->add('article_subcategories', 'entity',
                    array(
                         'label' => 'Podkategorie',
                         'multiple' => true,
                         'expanded' => true,
                         'read_only' => true,
                         'class' => 'FachowoArticleBundle:ArticleSubcategory',
                         'query_builder' => function (EntityRepository $er)
                         {
                             return $er
                                     ->createQueryBuilder('sc')
                                      ->where('sc.article_category = :id')
                                      ->orderBy('sc.name', 'ASC')
                                      ->setParameter('id', $id);
                         }
                    ));

如何将 $id 传递给 formMapper 中的这个函数?

【问题讨论】:

    标签: php symfony doctrine


    【解决方案1】:

    您可以使用 PHP 5.3 的闭包。大多数带有闭包的语言都会自动执行此操作,但 PHP 要求您明确指定列表。

    'query_builder' => function (EntityRepository $er) use ($id)
       {
          return $er
            ->createQueryBuilder('sc')
            ->where('sc.article_category = :id')
            ->orderBy('sc.name', 'ASC')
            ->setParameter('id', $id);
        }
    

    【讨论】:

      【解决方案2】:

      一个不错的方法是在创建表单时使用 options 数组,因此在数组中传递 id,然后在表单中执行:

      public function buildForm(FormBuilderInterface $builder, array $options)
      {
          $id = $options['id'];
          $builder
              ->add('foo', 'entity', array(
                  'class' => 'Foo',
                  'query_builder' => function (EntityRepository $er) use ($id) {
                      return $er->findByBar($id);
                  }
              ))
          ;
      }
      

      【讨论】:

      • 需要注意的是,你不能随便添加任意项到 FormType 的 $options;您需要通过覆盖 FormType 的 getDefaultOptions 方法来声明它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多