Здравствуйте, изучаю yi2, столкнулся с простой казалось бы задачей - создавать поля формы на стороне пользователя.
Форма заказа, где помимо прочего есть таблица продуктов, где по нажатию кнопки должна добавляться строка с новым продуктом, где содержаться несколько полей.
Строку в форму добавляю следующим кодом в представлении:
<?php
$add_product = "var product_row = Number(" . $product_row++ . ");";
$add_product .= "$('#add-product').on('click', function(e) {
e.preventDefault();
var html = '';
html += '<div class=\"row product-item flex-form pb-2\"><div class=\"col-5 field-form-select-prod required\">';
html += '<select id=\"form-select-prod\" class=\"form-select\" name=\"OrderProduct['+product_row+'][product_id]\" aria-required=\"true\">';
html += '<option value=\"\">--Не выбрано--</option>';
";
foreach ($products as $product_id => $product_name) {
$add_product .= "html += '<option value=\"" . $product_id . "\">" . $product_name . "</option>';";
}
$add_product .= "html += '</select><div class=\"invalid-feedback \"></div>';
html += '</div>';
//// плюс еще несколько полей
$('.order-products').append(html);
product_row++;";
$add_product .= "});";
$this->registerJs(
$add_product,
View::POS_END
);
?>
контроллер
public function actionCreate() {
........
$model_product = [new OrderProduct()];
if ($this->request->isPost) {
//корректно ли делать вот так:
foreach($this->request->post('OrderProduct') as $k => $order_product){
if(!isset($model_product[$k])){
$model_product[] = new OrderProduct();
}
}
if (Model::loadMultiple($model_product, $this->request->post())) {
foreach ($model_product as $order_product) {
$order_product->save(false);
}
}
}