У меня есть форма Symfony с коллекцией. Пользователи могут добавлять или удалять пользователей из организации (просто для примера). Однако я хочу запретить людям удалять определенных пользователей из организации. Допустим, администраторов нельзя удалить, но их имя все еще можно изменить.
Вот что у меня сейчас есть:
class OrganisationType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add(
'users',
CollectionType::class,
[
'required' => FALSE,
'entry_type' => UserType::class,
'label' => 'Users',
'show_legend' => FALSE,
'entry_options' => [
'label_render' => FALSE,
'data_class' => User::class,
],
'widget_add_btn' => ['label' => 'Add user'],
'by_reference' => FALSE,
'allow_add' => TRUE,
'allow_delete' => TRUE,
'prototype' => TRUE,
]
);
}
}
class UserType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add(
'name',
TextType::class,
['required' => TRUE]
)
->add(
'email',
TextType::class,
['required' => TRUE]
);
}
}
Я читал о событиях формы , но при попытке использовать события формы в моем UserType
, похоже, нет способа изменить записи в коллекции:
$builder->addEventListener(
FormEvents::POST_SET_DATA,
function(FormEvent $event) {
$user = $event->getData();
$form = $event->getForm();
if ($user->isAdmin()) {
//maybe some logic here? But what?
}
}
)
Могу ли я изменить entry_options
на основе данных записи?