Задать вопрос
Akuma
@Akuma
Веб-программист

Как получить ID в QueryBuilder`е внутри FormType?

Добрый вечер,

Есть свой FormType на Symfony 2.3

namespace Q\FilesBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Doctrine\ORM\EntityRepository;

use Q\FilesBundle\Entity\File;


class FilesType extends AbstractType
{
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'multiple' => true,
            'required' => false,
            'class' => 'QFilesBundle:File',
            'query_builder' => function($repository) {
                        // Вот тут
            },
        ));
    }

    public function getParent()
    {
        return 'entity';
    }

    public function getName()
    {
        return 'files';
    }
}


Как внутри замыкания (query_builder) получить ID текущей сущности, для которой строится форма?
Проще говоря, мне нужно отфильтровать этот список по родительскому ID
При этом можно манипулировать только кастомным FormType.
  • Вопрос задан
  • 2707 просмотров
Подписаться 3 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@zloyusr
Просто передайте нужную сущность в конструктор вашего типа и далее что то типа:
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'multiple' => true,
            'required' => false,
            'class' => 'QFilesBundle:File',
            'query_builder' => function($repository) {
                        $id = $this->news->getId();
                       // ваш код
            },
        ));
    }
Ответ написан
to0n1
@to0n1
Вам нужно использовать EventListener'ы для формы на события PRE_BIND (если не ошибаюсь в 2.3 PRE_SUBMIT) и на PRE_SET
код одного open source проекта (не имею к нему отношения, не примите за рекламу)
По ссылке вы увидите как, динамически строится список провинций в зависимости от выбранной страны.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы