Задать вопрос
another_dream
@another_dream
Backend-разработчик, Laravel/ZF2/Yii2

Как правильно реализовать форму добавления n-копий одной и той же модели (инпутов) в одной форме без перезагрузки?

Доброго времени суток.

Имеется форма для создания неопределённого количества продуктов.
Модель - Product.
Как правильно составить эту форму, чтобы можно было создавать неограниченное количество продуктов (массив)?
Если мне необходимо какое-либо поле продублировать, то делаю так:
<input type="text" name="Product[field_name][]">
<input type="text" name="Product[field_name][]">

Но как провернуть подобное, но для целой модели?
Были идеи и даже реализация подстановки рандомного ключа по шаблону, на лету с помощью JS, но чувствую, что это очень грубый костыль, каких еще поискать надо.

В идеале, хотелось бы, чтобы запись вида:
<input type="text" name="Product[][name]">
<input type="text" name="Product[][description]">

работала по аналогии с предыдущим вариантом, но, увы, это не реально.
Может быть есть способ подобного определения полей в рамках какого-то тега?
Вроде:
<!-- Первый продукт, запишется с ключом 0 -->
<form-item>
    <input type="text" name="Product[][name]">
    <input type="text" name="Product[][description]">
</form-item>
<!-- Второй продукт, запишется с ключом 1 -->
<form-item>
    <input type="text" name="Product[][name]">
    <input type="text" name="Product[][description]">
</form-item>


Можно, конечно, при создании нового экземпляра формы отдавать её не из скрытого шаблона на странице, а посредством AJAX подгрузки, где на стороне PHP, в экшене создавать новую модель под эту форму, сохранять, получать ID созданной модели и в качестве ключа использовать этот ID.

Однако, если нет более элегантного решения - получение HTML-кода формы через AJAX, наиболее приемлемый вариант.

Заранее благодарю за любые ответы.

UPD:
Множатся не формы, а модели, которые нужно заполнить. И их количество динамически меняется. Поэтому в моём случае оптимально использовать в качестве ключа - ID модели:
<input type="text" name="Product[<?=$productModel->id;?>][name]">
<input type="text" name="Product[<?=$productModel->id;?>][description]">

То есть форму запрашивать посредством AJAX и при рендере формы указывать ключ новой, созданной при запросе модели, которая уже сохранена в базе под инкрементируемым ID.
  • Вопрос задан
  • 158 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
Если я правильно Вас понял, то речь идёт о "Табличном вводе"
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы