yii2 - 模型加载函数没有设置一些模型属性

yii2 - model load function does not set some model attributes

我正在开发 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,
      ]);
  }

提交表单后,我用 die() 登录了 Yii::$app->request->post() 并且所有三个参数 amountreceiptNumberdescription 都存在于 post 与他们正确的价值观(一切都是正确的)。但是调用 $modelForm->load 函数后,这是我的模型属性:

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

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

在视图文件

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

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

查看rules()方法确认。

默认情况下,方法 load() 仅将 "safe" 值应用于属性,如果在当前场景中有规则,则值被视为 "safe"。

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

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