и 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')
Тэк, примерно понял, позже попробую, спс
Обсуждают сегодня