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

Есть модель Order с таким правилом валидации

public function rules()
    {
        return [
            [['user_id', 'city_id', 'payment',], 'required'],
            ['street', 'required', 'message' => 'Укажите название улицы.'],
            ['house', 'required', 'message' => 'Укажите номер дома.'],
            ['flat', 'required', 'message' => 'Укажите номер квартиры.'], 
            ...
}

Есть необходимость оформить заказы без доставки и вот теперь вопрос можно ли использовать так

const SCENARIO_NOT_DELIVERY = 'notDelivery'
 public function scenarios()
    {
        return [
            self::SCENARIO_NOT_DELIVER => ['user_id', 'city_id'],
        ];
    }
и потом где надо
$model = new Order(['scenario' => User::SCENARIO_NOT_DELIVER]);

а где не надо
$model = new Order()

вот так объявлено
const SCENARIO_NOT_DELIVERY = 'notDelivery';
     public function scenarios()
     {
         return [
             self::SCENARIO_NOT_DELIVERY => ['user_id', 'payment'],
         ];
     }

вот так вызываю
if($dilivery['delivery']==0){
            $order = new Order(['scenario' => Order::SCENARIO_NOT_DELIVERY]);
            $order->delivery=0;
            $order->city_id=Yii::$app->params['cities'];
        }else{
            $order = new Order();
        }

получаю
Unknown scenario: default
  • Вопрос задан
  • 217 просмотров
Решения вопроса 2
Можно, а в чем сомнения?
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Можно, при этом можно вместо
public function scenarios()
    {
        return [
            self::SCENARIO_NOT_DELIVER => ['user_id', 'city_id'],
        ];
    }

писать прямо в правилах валидации
public function rules()
    {
        return [
            [['user_id', 'city_id'], 'required','except'=>'notDelivery'],
            [['payment',], 'required'],
            ...
}

В данном случае мне кажется это более удобно, так как надо не игнорить при массовом присвоении полностью эти атрибуты, а убрать обязательность заполнения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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