Вывод и сохранение даты в различных форматах с помощью валидатора

Выкладываем свои наработки
Ответить
Аватара пользователя
vjik
Сообщения: 23
Зарегистрирован: 2012.04.02, 18:59

Вывод и сохранение даты в различных форматах с помощью валидатора

Сообщение vjik » 2017.07.26, 07:56

В очередной раз столкнулся с задачей, когда в БД данные хранятся в одном формате, а в форме выводятся в другом.

Ранее использовал вариант с виджетом от картика и иногда вариант с геттером/сеттером, но как-то было не красиво и не очень удобно. Поиск подсказал ещё вариант с поведением, но это ещё больше кода и меньше прозрачности.

Посмотрев на валидатор default пришла идея сделать валидатор для преобразования даты. В итоге получилось вот что:

Код: Выделить всё

class AsDateValidator extends Validator
{
    public $format = 'yyyy-MM-dd';

    public function validateAttribute($model, $attribute)
    {
        switch ($this->format) {
            case 'U':
            case 'timestamp':
                $value = Yii::$app->formatter->asTimestamp($model->$attribute);
                break;
            default:
            $value = Yii::$app->formatter->asDate($model->$attribute, $this->format);
        }
        $model->$attribute = $value;
    }
}
… и теперь решение задачи вышло очень простым, коротким и понятным:

Код: Выделить всё

['birthday', AsDateValidator::className(), 'format' => 'php:Y-m-d'], // 2017-07-26
['date', AsDateValidator::className(), 'format' => 'dd.MM.yyyy HH:mm:ss'], // 15.07.2017 02:15:20
['dayX', AsDateValidator::className(), 'format' => 'U'], // 1501020241
['dayZ', AsDateValidator::className(), 'format' => 'timestamp'], // 1501020241
Покритикуйте :)

Аватара пользователя
ElisDN
Сообщения: 4590
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Вывод и сохранение даты в различных форматах с помощью валидатора

Сообщение ElisDN » 2017.07.26, 08:22

Что только не придумают, чтобы модель формы не делать...
Не забудьте пройти мастер-класс по Yii2.

Аватара пользователя
vjik
Сообщения: 23
Зарегистрирован: 2012.04.02, 18:59

Re: Вывод и сохранение даты в различных форматах с помощью валидатора

Сообщение vjik » 2017.07.26, 08:27

ElisDN писал(а):
2017.07.26, 08:22
Что только не придумают, чтобы модель формы не делать...
Ну да, это для простых случаев без форм :)

А вот про формы… В какое место правильнее поместить код, который на основании данных формы наполняет сущность?



Ответить