Yii2 - установить безопасные атрибуты в сценариях

Как я могу защитить свои атрибуты для массового назначения, когда я использую сценарий (в моем примере сценария «обновление»)?

Вот мои правила:

public function rules()
{
    return [
        [['user_id', 'type', 'name', 'status'], 'required'],
        [['country_id', 'address', 'name', 'status'], 'safe', 'on' => 'update'],
    ];
}

public function scenarios()
{
    $scenarios = parent::scenarios();
    $scenarios['update'] = ['user_id', 'type', 'name'];
    return $scenarios;
}

Когда я проверяю безопасные атрибуты в своем контроллере с помощью $model->safeAttributes(), я получаю только те атрибуты, которые требуются в сценарии «обновления» функции scripts().

И, конечно же, функция $model->load(Yii::$app->request->post()) не извлекает другие атрибуты.

Как я могу поместить их в безопасное место? Даже если я хочу добавить некоторые другие правила, я не могу найти способ!


person Samir IZZA    schedule 11.01.2018    source источник
comment
вы устанавливаете сценарий перед вызовом $model->safeAttributes()   -  person Muhammad Omer Aslam    schedule 11.01.2018
comment
Да, я определяю сценарий сразу после функции findModel следующим образом: public function actionUpdate($id) { $model = $this->findModel($id); $model->scenario = 'CU';   -  person Samir IZZA    schedule 11.01.2018


Ответы (2)


Вам нужно добавить их все в сценарий

$scenarios['update'] = ['user_id', 'type', 'name', 'country_id', 'address', 'name', 'status'];
person Golub    schedule 12.01.2018
comment
Если я собираюсь это сделать, значит, все эти поля становятся обязательными. Но я не хочу этого. - person Samir IZZA; 12.01.2018
comment
@SamirIZZA Нет, это означает, что все эти поля безопасны и могут быть массово назначены. Обязательные поля, которые вы настраиваете в правилах. - person Golub; 12.01.2018
comment
О человек, ты прав! Не знаю, как я это так понял. Я всегда думал, что таким образом мы объявляем обязательные поля, а не активные поля. Но я был неправ. Спасибо за помощь! - person Samir IZZA; 13.01.2018
comment
@SamirIZZA Я рад помочь. - person Golub; 15.01.2018

Установите сценарий перед загрузкой модели:

$model->setScenario('update');
$model->load(Yii::$app->request->post())
person Patrick    schedule 11.01.2018