Sonata admin bundle поле типа коллекция не удаляется
Имеется сущность Product и к нему соответственно ProductAdmin. У Product имеется отношение one-to-many к характеристикам этого продукта(ProductCharacteristic). Я хочу сделать так, чтобы в представлении формы редактирования можно было менять значения коллекции ProductCharacteristic. В ProductAdmin регистрирую метод по конструированию вида формы редактирования Product:
public function configureFormFields(FormMapper $form)
{
$form
->with('Продукт', ['class' => 'col-md-4'])
->add('name')
->add('category', EntityType::class, [
'class' => Category::class,
'choice_label' => 'name',
])
->end()
->with('Характеристики', ['class' => 'col-md-8'])
->add('characteristics', CollectionType::class, [
'type_options' => [
'delete' => true, // TODO НЕ РАБОТАЕТ!!!
]
],
[
'edit' => 'inline',
'inline' => 'table',
'sortable' => 'position',
'limit' => 7,
])
->end();
}
Все вроде работает, НО! нет возможности удалить значения добавляемые в список. Информацию беру отсюда https://sonata-project.org/bundles/core/master/doc/reference/form_types.html#collectiontype
На скрине видно отсутствие кнопки delete.
Заранее спасибо!
Ответы (2 шт):
У класса Product в аннотации @ORM\OneToMany() нужно добавить свойство orphanRemoval=true. Это должно решить проблему
В общем частично решил проблему - отсутствовала строка с правами на удаление):
# ...
role_hierarchy:
ROLE_PRODUCT_CHARACTERISTIC_ROOT:
- ROLE_ADMIN_PRODUCT_CHARACTERISTIC_LIST
- ROLE_ADMIN_PRODUCT_CHARACTERISTIC_EDIT
- ROLE_ADMIN_PRODUCT_CHARACTERISTIC_VIEW
- ROLE_ADMIN_PRODUCT_CHARACTERISTIC_CREATE
- ROLE_ADMIN_PRODUCT_CHARACTERISTIC_DELETE
ROLE_ADMIN: [ ROLE_PRODUCT_CHARACTERISTIC_ROOT ]
Почему частично? Потому, что странное какое-то удаление, т.е. я могу удалить строку из списка только после того как отмечу строку чекбоксом delete и отправлю запрос update на сервер. Не очень как мне кажется решение, было бы приятнее, например, напротив каждой строки иметь кнопку delete и при ее нажатии удалять всю строку из формы. Т.е. зачем нагружать сервер для удаления случайно добавленной строки?)
