2017-02-10 19 views
1

У меня есть некоторые вопросы, касающиеся Yii сценария (это понятие довольно ново для меня)Yii2 - Реализовать сценарий

Если у меня есть Post класс, который расширяет Model и имеют следующие атрибуты

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

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

является

// 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'] 
    ]; 
} 

так же, как

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

- код 1 и 2 - то же самое?

будет 'id', 'title', ‘body’ безопасен от массы, назначенной для обоих кодов, или я должен указать «безопасные» правила для кода 1?

ответ

1

Код 1 и код 2 не то же самое. Вам нужно будет указать все безопасные атрибуты для каждого сценария

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

Для кода 1 Всех три атрибута id, title, body будет необходим во время оба создания и обновления действий.

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

Для кода 2id, title, body будет необходим, если вы установите сценарий модели с save использованием $model->scenario='save';

Когда потребуется $model->scenario='update', title и body.

Вот пример того, как мы устанавливаем сценарий модели. Исходя из класса Post.

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 
     } 
    } 
} 

Вот некоторые некоторые другие ссылки, которые могут помочь вам начать работу с Сценарии

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

+0

Вы уверены в этом? снова посмотри на мой код 1, я ставлю метод сценария там – densityx