yii2 - 模型加载函数不设置某些模型属性

时间:2016-09-20 06:54:58

标签: php yii2 yii2-advanced-app

我正在开发PHP Yii2应用程序。我对yii2 yii\base\Model.load函数有一个奇怪的问题。这是我的问题:

我有一个名为PaymentIncreaseBalanceForm的表单模型,如下所示:

class PaymentIncreaseBalanceForm extends yii\base\Model {
     public $amount;
     public $receiptNumber;
     public $description;
     ...
}

以下是我的观看文件的一部分:

<?= $form->field($model, 'amount')->textInput(['maxlength' => true]) ?>

<?= $form->field($model, 'receiptNumber')->textInput(['maxlength' => true]) ?>

<?= $form->field($model, 'description')->textarea(['rows' => 6]) ?>

这是我的控制器动作:

 public function actionIncreaseBalance()
 {
      $modelForm = new PaymentIncreaseBalanceForm();
      if ($modelForm->load(Yii::$app->request->post()))
      {
              //some logic
      }

       return $this->render('increase-balance', [
                'model' => $modelForm,
      ]);
  }

提交表单后,我使用Yii::$app->request->post()记录了die(),并且帖子中存在所有三个参数amountreceiptNumberdescription及其正确的值(每件事都是对的)。但在调用$modelForm->load函数后,这是我的模型属性:

$amount => 1000,
$receiptNumber => 887412141,
$description => NULL,

$description总是为NULL!我不知道这个领域有什么问题。我的代码有什么问题吗?

3 个答案:

答案 0 :(得分:12)

您的代码中可能没有为description属性添加规则。

检查rules()方法以确认它。

默认情况下,方法load()仅对属性应用“安全”值,如果在当前方案中存在规则,则值被视为“安全”。

答案 1 :(得分:1)

从视图文件

中的描述<?= $form->field($model, 'description')->textarea(['rows' => 6]) ?>中删除$ sign

答案 2 :(得分:1)

类似的问题通常可能由"safe attributes"引起(如Bizley所说)。

在包含许多规则和方案的复杂情况下,您可以通过Model::safeAttributes检查当前的安全属性。 在加载数据之前立即执行。