Есть ли правильный способ настроить форму в зависимости от роли пользователя, который ее запрашивает?
Мой сценарий довольно прост: мне нужно скрыть некоторые поля, если пользователь не предоставил ROLE_ADMIN
. Я пытался избежать отображения поля на Twig, но
{% if is_granted('ROLE_ADMIN') %}
{{form_row(form.field)}}
{% endif %}
не работает, потому что построитель форм обходит эту проверку.
Версия Symfony: 2.8.2
ИЗМЕНИТЬ
Благодаря предложению @Rooneyl я нашел решение:
Сначала вам нужно добавить ключ «роль» в параметр параметров. Итак, в configureOptions() $options['role']
всегда ROLE_USER.
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MyBundle\Entity\Ticket',
'role' => 'ROLE_USER'
));
}
Затем в контроллере нужно передать массив getRoles()
:
$user_roles = $this->getUser()->getRoles();
$form = $this->createForm('MyBundle\Form\TicketType', $ticket, array('role' => $user_roles));