Как установить формат даты в зависимости от входящего другого значения атрибута в модели Yii2

#php #yii2 #yii2-model #yii2-validation

#php #yii2 #yii2-модель #yii2-проверка

Вопрос:

Я хочу сохранить модель задачи, но не могу сделать это без определения даты. У меня есть логический атрибут allDay (флажок в поле зрения), и если он установлен в ИСТИННОМ формате даты, он должен быть d-m-Y ; иначе ‘d-m-Y H: m’. Как определить это условие в rules() методе?

Следующий код не работает:

 public function rules() {
    return [
        [['title', 'user_id'], 'required'],
        [['description'], 'string'],
        [['start', 'end'], 'date', 
            'format' => $this->allDay ? 'php:d-m-Y' : 'php:d-m-Y H:i'],
    ];
}
 

Ответ №1:

Для этого вы можете использовать встроенный валидатор или задать условие в правилах. Для условия сделайте это:

 [['start', 'end'], 'date', 'format' => 'php:d-m-Y', 'when' => function ($model) {
    return $model->allDay;
}],
[['start', 'end'], 'date', 'format' => 'php:d-m-Y H:i', 'when' => function ($model) {
    return !$model->allDay;
}],