2016-09-20 1 views
2

Ich arbeite an einer PHP Yii2-Anwendung. Ich habe ein seltsames Problem mit yii2 yii\base\Model.load Funktion. Hier ist mein Problem:yii2 - Modellladefunktion setzt einige Modellattribute nicht

Ich habe ein Formular Modell PaymentIncreaseBalanceForm wie unten genannt:

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

Hier ist ein Teil meiner Ansicht file:

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

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

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

Und das ist meine Controller-Aktion:

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

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

Nachdem ich das Formular abgeschickt habe, loggte ich Yii::$app->request->post() mit die() und alle drei Parameter amount, receiptNumber, description existieren in der Post mit ihren richtigen Werten (alles stimmt). Aber nach $modelForm->load Aufruf der Funktion, das ist mein Modell Attribut:

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

$description immer NULL ist! Ich weiß nicht, was das Problem mit diesem Feld ist. Gibt es ein Problem mit meinem Code?

Antwort

8

Wahrscheinlich gibt es keine Regel für description Attribut in Ihrem Code hinzugefügt.

Überprüfen Sie die rules() Methode, um es zu bestätigen.

Standardmäßig wendet Methode load() nur "sichere" Werte auf Attribute an, und Wert wird als "sicher" betrachtet, wenn im aktuellen Szenario eine Regel dafür vorhanden ist.

+0

Vielen Dank für Ihre Antwort. Das Hinzufügen von 'safe' löste mein Problem. – hamed

+0

Bitte lesen Sie http://www.yiiframework.com/doc-2.0/guide-tutorial-core-validators.html, um die Bedeutung der verschiedenen Validatoren zu erhalten, die Sie in '' rules() '' 'angeben können. "Safe" ist ein spezieller Validator (nicht einmal gültig), für Ihre Beschreibung hätten Sie "string" verwenden können. – MacGyer

+0

Bitte können Sie [diese Frage] auschecken (http://stackoverflow.com/questions/42591365/yii2-model-load) - funktioniert nicht wie erwartet – SaidbakR

1

Remove $ -Zeichen von der Beschreibung <?= $form->field($model, 'description')->textarea(['rows' => 6]) ?> in Ansichtsdatei

+0

vielleicht Fehler in seinem Code. warte auf seine Antwort. – agungandika

+0

Entschuldigung, das ist ein Fehler in meinem Code, ich habe meine Frage bearbeitet. – hamed

1

Ähnliche Probleme können oft durch "safe attributes" (wie sagen Bizley) verursacht werden.

In komplexen Fällen mit vielen Regeln und Szenarien können Sie die aktuellen sicheren Attribute über Model::safeAttributes überprüfen. Führen Sie es unmittelbar vor dem Laden von Daten aus.

Verwandte Themen