Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Как программировать с Yii2: Поведение Timestamp

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called How to Program With Yii2.
How to Program With Yii2: Blameable Behaviors
How to Program With Yii2: Validations

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Final product image
What You'll Be Creating

Если вы спрашиваете: «Что такое Yii?» ознакомьтесь с моим предыдущим учебным пособием: Введение в Yii Framework, в котором рассматриваются преимущества Yii и включает обзор нового в Yii 2.0, выпущенного в октябре 2014 года.

В этой серии программирование с Yii2 я направляю читателей в использование недавно обновленного фреймворка для PHP Yii2. В этом уроке мы рассмотрим Timestamp Behaviors, которые уменьшают объем кода, который вам нужно написать с каждой новой моделью, для общей операции создания временных меток для вставок и обновлений. Мы также погрузимся в исходный код Yii2, изучив то, каким образом это поведение реализовано.

Для примеров в этом уроке мы продолжим считать, что мы создаем фреймворк для публикации простых обновлений статуса, например, наш собственный мини-Twitter.

Просто напоминание, что я участвую в нижеуказанных комментариях. Меня особенно интересует, если у вас разные подходы, дополнительные идеи или вы хотите предложить темы для будущих учебников.

Что такое поведение?

Поведение Yii2 - это по существу миксины. Википедия описывает mixins как «класс, который содержит комбинацию методов из других классов. Как такая комбинация выполняется, зависит от языка, но это не наследование».

Yii описывает их следующим образом:

Прикрепление поведения к компоненту «внедряет» методы и свойства поведения в компонент, делая эти методы и свойства доступными так, как если бы они были определены в самом классе компонента.

Yii2 предлагает несколько встроенных моделей поведения, большинство из которых мы будем документировать, в том числе sluggableblameable и timestamp. Поведение - это простой способ повторно использовать общий код во многих ваших моделях данных, не дублиря код во многих местах. Внедрение поведения в модель часто может выполняться всего лишь двумя строчками кода. По мере увеличения количества моделей в вашем приложении поведение становится все более актуальным.

Что такое поведение Timestamp?

Timestamp Behavior позволяет нам быстро выполнить часто заданную задачу назначения текущей даты и времени для вставки и обновления в модели ActiveRecord, автоматически устанавливая свойства для created_at и updated_at.

Ранее в этой серии мы вручную применяли поведение метки времени. Всякий раз, когда модели Status были отправлены пользователем, отправляющим форму, мы назначили текущую временную метку Unix для обоих полей:

Реализация поведения Timestamp сделает это автоматически для нас и может быть легко добавлена ко всем моделям ActiveRecord в вашем веб-приложении.

Внедрение поведения Timestamp в модель Status

Почти каждая модель, которую я создаю в Yii, имеет поле created_at и updated_at. Это хорошая практика. Таким образом, поведение Timestamp будет полезно практически для каждой модели.

Добавление поведения Timestamp в модель Status

В models/Status.php мы добавляем TimestampBehavior после Sluggable и Blameable:

Мы также должны включить класс ActiveRecord в начало нашей модели (я всегда забываю эту часть):

Затем мы удаляем правило required для created_at и updated_at в правилах модели:

Вот так:

Это позволяет пройти валидации и продолжить в поведении.

Нам также необходимо удалить назначения created_at и updated_at в StatusController в действии create:

После того как все эти изменения будут завершены, мы можем написать новый статус:

Creating a Status entry now that weve attached the Timestamp Behavior

И в результате в представлении отображаются настройки created_at и updated_at, заполненные поведением Timestamp.

View of the results of Timestamp Behavior on our Status model

Метод Touch

Поведение Timestamp также предоставляет метод с именем touch(), который позволяет назначать текущую временную метку указанному атрибуту(-ам) и сохранять их в базе данных.

Например, если у вас есть фоновое задание cron, которое выполняет некоторую обработку в таблице Status, у вас может быть временная метка last_processed_at, к которой вы привязываете поведение. Всякий раз, когда выполняется задание cron, вы должны коснуться этого поля:

Исходный код поведения Timestamp

Поскольку Yii2 теперь поддерживает соглашения об именах PSR-4, проще всего погрузиться в код фреймворка, чтобы увидеть, как он работает. Давайте посмотрим на код TimestampBehavior, чтобы понять, как он реализован.

Код связан с GitHub со страницы документации:

Здесь определяются атрибуты по умолчанию, и они могут быть настроены в наших моделях:

При инициализации поведение определяет, какие события запускают обновления временной метки для указанных атрибутов:

Здесь вы можете узнать больше о событиях Yii2 ActiveRecord.

Метод getValue возвращает текущую временную метку для атрибута, если она не определена:

По умолчанию TimestampBehavior будет заполнять атрибуты created_at и updated_at текущей меткой времени, когда соответствующий объект будет вставлен. Он будет заполнять атрибут updated_at меткой времени, когда объект обновляется. Если назначенная пользовательская функция не назначена, она использует функцию PHP time(), которая возвращает текущую временную метку Unix.

Он также реализует метод touch для определенных атрибутов:

Надеюсь, это даст вам представление о том, как реализовать свое поведение модели. Если вы создадите что-то новое, разместите ссылку на код в комментариях, чтобы другие могли это посмотреть.

Что дальше?

Надеюсь, вам понравилось изучать поведение Yii2 Timestamp и его исходный код.

Следите за предстоящими учебниками в моей серии статей Программировании с Yii2, где я продолжаю погружаться в разные аспекты фреймворка. Вы также можете ознакомиться с моей серией статей Пишем стартап на PHP, в которой используется расширенный шаблон Yii2, где я создаю реальное приложение.

Я приветствую пожелания по темам будущих уроков. Вы можете опубликовать их в комментариях ниже или отправить мне по электронной почте на моем веб-сайте Lookahead Consulting.

Если вы хотите узнать, когда выйдет следующий учебник Yii2, подпишитесь на меня @reifman в Twitter или проверьте мою страницу инструктора. Моя страница инструктора будет включать все статьи из этой серии, как только они будут опубликованы.

Ссылки по теме

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.