2017-02-10 4 views
1

Ich habe einige Fragen in Bezug auf Yü Szenario (diesem Konzept ist für mich ziemlich neu)Yii2 - Umsetzung Szenario

Wenn ich Post Klasse, die Model und haben die folgenden erweitert Attribute

public $id; 
public $title; 
public $body; 

CONST SCENARIO_SAVE = 'save'; 
CONST SCENARIO_UPDATE = 'update'; 

ist

// Code 1 
public function rules() { 
    return [ 
      ['id', 'integer'], 
      [['title', 'body'], 'string'], 
      [['id', 'title', 'body'], 'required'] 
    ]; 
} 

public function scenarios() 
{ 
    return [ 
     self::SCENARIO_SAVE => ['id', 'title', 'body'], 
     self::SCENARIO_UPDATE => ['title', 'body'] 
    ]; 
} 

das gleiche wie

// Code 2 
return [ 
     ['id', 'integer'], 
     [['title', 'body'], 'string'], 
     [['id', 'title', 'body'], 'required', 'on' => 'save'], 
     [['title', 'body'], 'required', 'on' => 'update'] 
]; 

ist Code 1 und 2 das gleiche?

wird die 'id', 'title', ‘body’ sicher von Masse für beide Codes zugewiesen oder sollte ich "sichere" Regeln für Code 1 angeben?

Antwort

1

Code 1 und code 2 sind nicht gleich. Sie werden während alle sicheren Attribute für jedes Szenario

> `// Code 1 
public function rules() { 
    return [ 
      ['id', 'integer'], 
      [['title', 'body'], 'string'], 
      [['id', 'title', 'body'], 'required'] 
    ]; 
}` 

Für Code 1 Alle drei Attribute id, title, body erforderlich sein wird sowohl erstellen und aktualisieren Aktionen angeben.

> `// Code 2 
return [ 
     ['id', 'integer'], 
     [['title', 'body'], 'string'], 
     [['id', 'title', 'body'], 'required', 'on' => 'save'], 
     [['title', 'body'], 'required', 'on' => 'update'] 
];` 

Für Code 2id, title, body erforderlich, wenn Sie das Modell Szenario save mit $model->scenario='save'; gesetzt

Wenn $model->scenario='update', title und body erforderlich.

Hier ist ein Beispiel, wie wir das Szenario eines Modells einstellen. Nehmen Sie die Post Klasse.

public function actionMyAction(){ 
    $model = new Post; 
    $model->scenario = 'save';//changing the scenario which you want to use 

    if ($model->load(\Yii::$app->request->post())){ 
     // the rest of your code here.... 

     if($model->save(true,$this->scenario)){ 
      //return true if all the attributes passed the validation rules 
     } 
    } 
} 

Hier sind einige wenige andere Links, die Sie mit Szenarien den Einstieg erleichtern können

http://www.yiiframework.com/doc-2.0/yii-base-model.html#scenarios%28%29-detail http://www.bsourcecode.com/yiiframework2/yii2-0-scenarios/

+0

Sie das sicher? schau nochmal auf meinen code 1, ich stelle dort die szenario-methode ein – densityx