Модели, помимо множества других моментов, невероятно удобно использовать для валидации данных. Но иногда не хочется городить много лишних файлов, тем самым засоряя проект. В таком случае удобно использовать динамические модели.
Следующий пример, позволяет создать такую модель, добавить в нее несколько правил валидации. после чего загрузить данные, как будто в привычную модель, провести валидацию и т.д.
Итак:
use \yii\base\DynamicModel ;
// .....
public function actionForm()
{
$model = new DynamicModel(['name', 'email', 'address']);
$model
->addRule(['name','email'], 'required')
->addRule(['email'], 'email')
->addRule('address', 'string',['max'=>32]);
if( $model->load(Yii::$app->request->post()) && $model->validate() ){
// проводим любые действия
return $this->redirect(['view']);
}
return $this->render('form', ['model'=>$model]);
}
Код view, при этом, неизменен и никак не отличается от использования обычных, не динамических моделей.