2016-05-23 6 views
3

私はYii2で作業していますが、このモデルにはいくつかの属性があります。挿入/作成モードで必要なものもあれば、更新モードで必要なものもあります。 2つのシナリオを挿入して更新するモデルでは、シナリオとして属性の検証規則を設定します。問題は次のとおりです。両方のモデル(アクティブレコードとフォームモデル)でシナリオを定義する必要がありますか?Yii2モデルバリデーション

ありがとうございます。

答えて

0

シナリオは

...あなたのモデルで定義する必要がありますし、

public function actionUpdate(){ 

    .... 

    $model->scenario = 'update'; 
    ... 
+1

を入れてください、私の質問は、私は、Active Recordのモデルにし、フォームモデルの内側に二回のシナリオを定義するものとしていますか? –

+0

フォームモデルがActiveRecordモデルから派生している場合、宣言はActiveREcordモデルのみになります – scaisEdge

+0

最終的には、評価のためのアクティブレコードとフォームモデルを表示します.. – scaisEdge

0
ActiveRecord read from the database has the "update" scenario, while a new record has the "insert" scenario. 
    $modelA = User::model()->findByPk(1); // $model->scenario = 'update' 
    $modelB = new User();     // $model->scenario = 'insert' 
    $modelB->scenario = 'light';   // custom scenario 
    if ($modelB->validate()) {   // will only apply rules of the "light" scenario 
    ............... 
    .............. 
    } 
0

あなたのモデルでは、そうすることができますyouwantはあなたに関連するアクションで使用するシナリオを設定する必要があります。

class YourModel extends \yii\db\ActiveRecord 
{ 
    const SCENARIO_CREATE = 'create'; 
    const SCENARIO_UPDATE = 'update'; 

... 
public function scenarios(){ 
    $scenarios = parent::scenarios(); 
    $scenarios[static::SCENARIO_CREATE] = ['field_1', 'field_2']; 
    $scenarios[static::SCENARIO_UPDATE] = ['field_1', 'field_3']; 
    return $scenarios; 
} 

... 
} 

あなたの担当者:

class YourController extends Controller { 

... 

    public function actionCreate(){ 
     $model = new YourModel() 

     $model->scenario = YourModel::SCENARIO_CREATE; 

     if($model->validate()){ // validate fields specifed in YourModel SCENARIO_CREATE 
      ... 
     } 

     ... 
    } 

... 

    public function actionUpdate(){ 
     $model = new YourModel() 

     $model->scenario = YourModel::SCENARIO_UPDATE; 

     if($model->validate()){ // validate fields specifed in YourModel SCENARIO_UPDATE 
      ... 
     } 

     ... 
    } 

} 

は私の答え役立つ場合、私が知っているダニ))

+0

こんにちはVitaly、私はそれを使う方法を知っています、なぜ2つのモデルを使用し、 –

+0

あなたのコードを教えてもらえますか? – Vitaly