и symfony 6. Собрать форму по свойствам сущности товара + связи его с категорией не проблема. Столкнулся с тем что стандартные типы форм не подходят для реализации свойств товара, нужно сгенерировать строки (property_name, property_value, property_unit) и также добавлять пустые строки формы.
У product есть связь с property_value (OneToMany), а у property_value связь с property (ManyToOne).
Создал тип формы PropertyValue и реализовал метод buildForm:
public function buildForm(FormBuilderInterface,$builder, array $options): void
{
$options = [
'property' => [
'label' => 'Название',
'disabled' => true,
],
'property-value' => [
'label' => 'Значение',
'disabled' => 'true'
],
'property-unit' => [
'label' => 'Еденица измерения',
'disabled' => true
]
];
$builder
->add('property', TextType::class, $options['property'])
->add('property-value', TextType::class, $options['property-value'])
->add('property-unit', TextType::class, $options['property-unit'])
->add('property-btn-add', ButtonType::class, [
'label' => 'Добавить свойство'
]);
На выхлопе формы получил 3 инпута (только 1 строку) и кнопку, добавил листенер на FormEvents::POST_SET_DATA для установки имеющихся данных из связей по product
$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) use ($options) {
$form = $event->getForm();
$data = $event->getData();
foreach ($data as $datum) {
$options['property']['data'] = $datum->getProperty()->getName();
$options['property-value']['data'] = $datum->getValue();
$options['property-unit']['data'] = $datum->getProperty()->getUnit();
$form->add('property', TextType::class, $options['property']);
$form->add('property-value', TextType::class, $options['property-value']);
$form->add('property-unit', TextType::class, $options['property-unit']);
}
});
Вот тут и возникают у меня проблемы:
1. Когда прилетает объект Property в тип формы то он представляет коллекцию и я не совсем понимаю как не перетирать данные в одной полученной строке, а сгенерировать ровно столько строк сколько элементов в коллекции?
2. Так же не понимаю как подключаются шаблоны для типов форм, в доке симфони мол просто создайте шаблон и пишите, а где указывается какой шаблон должен юзаться для типа формы?
1 у тебя должны быть две формы, в первой будет CollectionType с параметром entry_type на класс второй формы 2 в атрибуте data-prototype передают инклуд include(path_to_tmpl)|e('html_attr')
Тэк, примерно понял, позже попробую, спс
Обсуждают сегодня