2016-09-20 9 views
2

私はPHP Yii2アプリケーションを開発中です。私はyii2 yii\base\Model.load機能に奇妙な問題があります。私は、フォームモデルは以下のようPaymentIncreaseBalanceFormと呼ばれているyii2 - モデルの読み込み機能が一部のモデル属性を設定していません

:ここに私の問題がある。ここ

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()とすべての3つのパラメータamountreceiptNumberdescriptionが正しい値(すべてのものが正しい)でポストに存在します。しかし$modelForm->load関数を呼び出した後、これは私のモデルの属性です:

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

$descriptionは常にNULLです!この分野で何が問題なのか分かりません。私のコードに問題はありますか?ビューファイルの記述<?= $form->field($model, 'description')->textarea(['rows' => 6]) ?>から

答えて

8

は、おそらくあなたのコード内でdescription属性の追加なしのルールはありません。

rules()の方法で確認してください。

デフォルトでは、メソッドload()は属性に「安全」値のみを適用し、現在のシナリオでは値が「安全」とみなされます。

+0

ありがとうございます。私の問題を解決するために 'safe'を追加しました。 – hamed

+0

'' 'rules()' ''で指定できるバリデータの意味を知るにはhttp://www.yiiframework.com/doc-2.0/guide-tutorial-core-validators.htmlを参照してください。 "安全"はあなたの説明のために "string"を使用している可能性がある特別なバリデータです(検証することさえできません) – MacGyer

+0

あなたはcheckout [この質問をしてください](http://stackoverflow.com/questions/42591365/yii2-model-load -does-not-work-as-expected) – SaidbakR

1

削除$記号は

+0

彼のコードを間違えるかもしれません。彼の反応を待っている。 – agungandika

+0

申し訳ありませんが、私のコードの間違いです、私は私の質問を編集しました。 – hamed

1

同様の問題は、"safe attributes"(Bizleyと同様)によって引き起こされることがよくあります。

多くのルールとシナリオを持つ複雑なケースでは、現在の安全属性をModel::safeAttributesで確認できます。 データをロードする直前に実行してください。

関連する問題