Можно ли изменить сценарий в beforrevalidation?

Собственно вопрос в следующем есть три сценария (вернее два + по умолчанию) есть свойство delivery от значения этого свойства буде зависеть применения сценария. Сейчас я в контролере делаю так.

if($dilivery['delivery']==0){
            $order = new Order(['scenario' => Order::SCENARIO_NOT_DELIVERY]);
}elseif ($dilivery['delivery']==2){
            $order = new Order(['scenario' => Order::SCENARIO_OUTHER])
}else{
            $order = new Order();
} 
if ($order->load(Yii::$app->request->post())&&$order->save()) {...}


Хотелось бы узнать могу ли я этот код перенести в модель и использовать его в методе beforevalidate ? И отработает ли тогда этот код ?
if ($order->load(Yii::$app->request->post())&&$order->save()) {...}
  • Вопрос задан
  • 24 просмотра
Решения вопроса 1
@Arik
если не ошибаюсь в документации писали, что на сценарий смотрят не только валидаторы, но может и другой код (название параметров, название формы). Выходит если не запустится валидация, то модель будет только в дефолтном состоянии.

$dilivery['delivery'] как получит beforrevalidation? сам полезет в request() ? останетесь без нормальных тестов.

Можно сделать статичный метод, например, Order::createForm($dilivery['delivery']) и там уже реализовать это все. Если много таких классов, то вынести в трейт
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы