При добавления нового товара (например в админке) они все присутствуют в форме и все сохраняются при отправке формы.
А в общедоступной части сайта доступно редактирование товара, но только 2 поля field_3, field_4.
Если просто создать форму с 2 полями field_3, field_4, то злоумышленник зная какие еще есть поля, может отправить и поля field_1, field_2 и они перезапишутся.
Как вариант сохранять изначальное состояние модели во временную переменную и потом явно перезаписывать поля которые не должны быть изменены из формы:
Код: Выделить всё
$model = $this->findModel($id);
$temp = $model;
if ($model->load(Yii::$app->request->post())) {
$model->field_1 = $temp->field_1;
$model->field_2 = $temp->field_2;
if ($model->save()) {
return $this->redirect('test');
}
}
Код: Выделить всё
$form = new ProductUpdateForm;
if ($form->load(Yii::$app->request->post()) && $form->validate()) {
$model = $this->findModel($id);
$model->field_3 = $form->field_3;
$model->field_4 = $form->field_4;
if ($model->save(false)) {
return $this->redirect('test');
}
}
P.S.: В реальности в таблицах много полей, которым нужно разрешить заполнение и много тех, которым нужно запретить перезапись.