Пользовательский параметр типа поля типа объекта - PullRequest
6 голосов
/ 27 января 2012

Я хочу создать тип поля Entity в Symfony 2 и передать параметр построителю запросов для списка фильтров связанных объектов:

$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?

Ответы [ 2 ]

8 голосов
/ 27 января 2012

Вы можете использовать замыкания 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);
    }
1 голос
/ 15 января 2013

Хорошим способом является использование массива параметров при создании формы, поэтому передайте 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);
            }
        ))
    ;
}
...