@maxeee52

Как реализовать Форму создания товара с генератором атрибутов?

Есть товары, атрибуты и значения атрибутов.

5fe634bb7875a648924621.jpeg

Хочу сделать с помощью Форм создание и редактирование товара.
В buildForm юзаю CollectionType чтоб была возможность генерить пару атрибут(которые созданы заранее) - значение

Форма продукта:
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, [
            	'help' 			=> "Type product name",
				'required' 		=> TRUE,
			])
            ->add('price', MoneyType::class, [
				'help' 			=> "Type product price",
				'divisor' 		=> 100,
				'required' 		=> TRUE,
			])
			->add('attributes', CollectionType::class, [
				'entry_type'	=> ProductAttributeValueType::class,
				'allow_add' 	=> true,
				'prototype' 	=> true,
			])
		;
    }


Форма пары Атрбут - Ззначение
public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $builder
            ->add('name', TextType::class)
            ->add('product',ChoiceType::class, [
				'choices'		=> $this->getAttributeSelect(),
			]) // Продукт (в процессе создания)
            ->add('attribute', ChoiceType::class, [
				'choices'		=> $this->getProductSelect(),
			])
        ;
    }


Вопрос размытый, но всё же.
Куда мне двигаться дальше?
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
@tukreb
Дальше отображаете это всё в twig.
Например можете в twig отправить готовую html код CollectionType формы в html атрибут data-prototype
<div data-prototype="
{% apply escape %}
     {{ include('app/template/prototype/collection_form.html.twig', { 'form': form.attributes.vars.prototype }) }}
{% endapply %}"></div>

в файле collection_form.html.twig что-то такое:
{{ form_widget(form.name) }}
{{ form_widget(form.product) }}
{{ form_widget(form.attribute) }}

Далее через javascript вставляете html форму из data-prototype, когда пользователь нажмёт кнопку добавить новый атрибут. При вставке вам нужно будет вручную выставлять индексы новым полям, по дефолту symfony засунет туда что-то вида form[__name__]
Ну при сохранение, всё будет в виде массива в attributes[]

Если у вас уже готовые атрибуты в attributes[], то просто через foreach создаёте форму.
{% for row in form.attributes %}
    {{ form_widget(row.name) }}
    {{ form_widget(row.attribute) }}
{% endfor %}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы