get $ this-> getUser () в FormType Symfony4 - PullRequest
       0

get $ this-> getUser () в FormType Symfony4

0 голосов
/ 02 февраля 2019

У меня есть объект с именем Profile, имеющий отношение к Category.Обе области охватываются company_id.

Когда я создаю новый профиль, я хочу показать возможные категории только из моего company_id.

В репозитории CategoryRepositor используется следующий метод:

/**
    * @return Category[] Returns an array of Category objects
    */
    public function findByCompany($value)
    {
        dump($value);
        return $this->createQueryBuilder('p')
            ->where('p.company = :val')
            ->setParameter('val', $value)
            ->getQuery()
            ->getResult()
        ;
    }

Метод работает корректно при использовании из индекса категории, где он перечисляет категории моей компании.

Но нет, при создании профиля мне нужно получить отношение.

Форма ProfileType имеет видследует:

$builder
    ->add('name')
    ->add('type')
    ->add('serial')
    ->add('sgin')
    ->add('sensor', EntityType::class, [
        'class'=>'App\Entity\Sensor',
        'choice_label' => 'name',
    ])
    ->add('category', EntityType::class, [
        'class'=>'App\Entity\Category',
        'choice_label' => 'name',
        'query_builder' => function (CategoryRepository $er) use($user) {
            return $er->findByCompany($user);
        },
    ])

, насколько я могу судить, $ user здесь должен содержать $ this-> getuser () (потому что из него я могу вызвать getCompany) или передать всю сущность компании.Сама передача идентификатора, похоже, не работает, я попытался сделать это вручную.

1 Ответ

0 голосов
/ 02 февраля 2019

В контроллере установите опцию в вашей функции createForm(), чтобы получить идентификатор вашего пользователя:

'userId' => $this->getUser()->getId()

Затем в ProfileType.php в вашей функции buildform() выше $builder->add(...) проведите пользователя черезопция, которую вы устанавливаете в контроллере так:

$userId = $options['userId'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...