首页 > 解决方案 > Yii2 - DynamicModel 中的属性

问题描述

我创建了一个yii\base\DynamicModelin 控制器,并且我有一个带有该模型属性的表单。在控制器中提交表单后,我需要访问这些属性。

控制器.php

public function actionCreate()
{
    $model = new DynamicModel([
        'name', 'age', 'city'
    ]);

    if($model->load(Yii::$app->request->post())){
        $model->age = $model->age + 5;
        /*
         * code....
         * */
        return $this->redirect(['index']);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

但是$model->age, $model->nameetc. 什么也不返回。

我只能通过这种方式访问​​属性:Yii::$app->request->get('DynamicModel')['age']

访问这些属性的正确方法是什么?

标签: model-view-controllermodelyii2

解决方案


您需要配置验证规则以便通过以下方式自动加载属性load()

$model = new DynamicModel(['name', 'age', 'city']);
$model->addRule(['name', 'age', 'city'], 'safe');

if ($model->load(Yii::$app->request->post())) {
// ...

Usingsafe将按原样接受值而无需实际验证,但您可以考虑添加真正的验证规则以确保模型的正确状态。


推荐阅读