Symfony2 / Twig: Как установить допустимые значения для dropDownField

0

У меня есть 3 объекта: User, Report и ReportCategory. Пользователь может помещать отчеты в ONE ReportCategory. В User-Entity есть список, который ReportCategories разрешен для пользователя. Это работает отлично - я сделал это с connectionTable, который имеет userID и reportCategoryId.

Теперь я создаю Array в контроллере, чтобы получить все ReportCategories текущего входа в User:

public function newAction()
    {
        $entity = new Report();
        $form   = $this->createCreateForm($entity);

        $userId = $this->get('security.context')->getToken()->getUser()->getId();
        $user = $this->getDoctrine()->getRepository('MyBundle:User')->find($userId);
        $userReportCategories = array();

        foreach($user->getReportCategories() as $reportCategory)
        {
            $userReportCategories[] = $reportCategory->getId();
        }

        return array(
            'entity' => $entity,
            'form'   => $form->createView(),
            'userReportCategories' => $userReportCategories
        );
    }

Как я могу установить только эти значения в поле шаблона ветки? Когда я создаю собственное поле, он не управляется формой Doctrine!

{{ form_row(form.reportCategory, {'attr': {'class': 'form-control'}, 'label': 'Category'}) }}

СПАСИБО ЗА ЛЮБОЙ ПОМОЩЬ !!!

UPDATE: мой тип ReportType выглядит так:

class ReportType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('reportCategory')
            ->add('creationDate', 'date', array(
                'data' => new \DateTime()
            ))
            ->add('headline')
            ->add('text')
            ->add('user')

        ;
    }
....
Теги:
twig
doctrine2

1 ответ

1

Создайте класс формы и добавьте прослушиватель событий, чтобы форма была осведомлена о пользователе. Ниже приведена адаптация " Как динамически генерировать формы на основе пользовательских данных в документах Symfony". [Не гарантируется точное определение ваших потребностей].

класс формы

use Symfony\Component\Security\Core\SecurityContext;
use Doctrine\ORM\EntityRepository;
// ...

class ReportFormType extends AbstractType
{
    private $securityContext;

    public function __construct(SecurityContext $securityContext)
    {
        $this->securityContext = $securityContext;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {


        // grab the user, do a quick sanity check that one exists
        $user = $this->securityContext->getToken()->getUser();
        if (!$user) {
            throw new \LogicException(
                'The ReportFormType cannot be used without an authenticated user!'
            );
        }

        $builder->addEventListener(
            FormEvents::PRE_SET_DATA,
            function (FormEvent $event) use ($user) {
                $form = $event->getForm();

                $formOptions = array(
                    'class' => 'Acme\DemoBundle\Entity\ReportCategory',
                    'property' => 'category',
                    'query_builder' => function (EntityRepository $er) use ($user) {
                        // build a custom query
                        // return $er->createQueryBuilder('c')
                        ->select('category')
                        ->where('user = $user);
                    },
                );

                // create the field, this is similar the $builder->add()
                // field name, field type, data, options
                $form->add('userReportCategories', 'entity', $formOptions);
            }
        );
    }

    // ...
}

новое действие

public function newAction()
    {
        $entity = new Report();
        $form   = $this->createForm(new ReportFormType(), $entity);

        return array(
            'entity' => $entity,
            'form'   => $form->createView(),
        );
    }
  • 0
    Но как мне сделать свое заявление Select? В моей таблице подключения «users_reportCategories» - это User_id и CategoryID, а в моем User Entity - ArrayCollection всех разрешенных категорий. Это возможно? Потому что в моей таблице User-Entity нет поля категории.
  • 0
    Если я правильно понимаю, у вас есть ManyToMany между User & ReportCategory. Предположительно таблица соединений не определена в .../Entity . Doctrine установит соединение, если объекты настроены правильно. Что происходит, когда вы пытаетесь выбрать категории ->where(user = $user) ?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню