Наткнулся на мысль, что при сохранении данных из форм стоит валидировать данные сначала валидирующей моделью, а затем сохранять все через модель, наследуемую от ActiveRecord.
Понимаю логику этого подхода, когда нужно данные добавить в базу. Тогда код достаточно простой
QuestionForm:namespace backend\models;
use yii\base\Model;
class QuestionForm extends Model {
public $active;
public $question;
public $answer;
public function rules()
{
return[
['question','required'],
['answer','required'],
['active','boolean'],
];
}
public function create()
{
if(!$this->validate()) {
return null;
}
$model = new Question();
......
return $model->save() ? true : false;
}
}
В контроллере actionCreate():public function actionCreate() {
$model = new QuestionForm();
if( \Yii::$app->request->isPost) {
if( $model->load(\Yii::$app->request->post()) && $model->create( ) ) {
...........
}
}
return $this->render('create', ['model' => $model]);
}
Тут все понятно. В view будет форма, с полями, названия которых будут что-то вроде QuestionForm[question] или QuestionForm[active]
Вот теперь самый главный вопрос, как сделать actionUpdate используя валидируюущую модель?
Если так
public function actionUpdate($id) {
$model = $this->findModel($id);
if( \Yii::$app->request->isPost) {
if($model->load( \Yii::$app->request->post()) && $model->save() ) {
$this->setSuccessAlert();
$this->redirect(['update', 'id' => $model->id ]);
}
}
return $this->render('update', [
'model' => $model,
]);
}
То валиадция будет уже в основной модели, которая наследована от ActiveRecord и получается что валидацию нужно дублировать и в Model и здесь.