【问题标题】:Yii2 - Attributes in DynamicModelYii2 - DynamicModel 中的属性
【发布时间】:2019-12-23 17:43:08
【问题描述】:

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

controller.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->name 等没有返回任何内容。

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

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

【问题讨论】:

  • 您的视图看起来如何?并且模型必须使用至少一个验证规则才能加载属性。
  • @Bizley 你是绝对正确的!谢谢!

标签: model-view-controller model yii2


【解决方案1】:

您需要配置验证规则才能通过load()自动加载属性:

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

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

使用safe 将按原样接受值而无需实际验证,但您可以考虑添加real validation rules 以确保模型的正确状态。

【讨论】:

  • 你完全正确!坦克!还有一个小问题,它可能定义DynamicModel 的名称,例如,当我在DynamicModel 中使用搜索时,现在网址是controller/index?DynamicModel[name]=John,我需要类似controller/index?PeopleSearch[name]=John 的东西?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-24
相关资源
最近更新 更多