0

Товар успешно добавлен в корзину

Оформить заказ

Важное обновление для разработчиков!

Недавнее обновление платформы до версии 2.0.1 является очень значимым для тех, кто разрабатывает дополнительную функциональность, потому что появились новые удобные инструменты для решения задач.

Оптимизация работы ORM объектов

Изменена логика инициализации ORM Объектов. Метод _init, в котором определяются все свойства объекта теперь не вызывается при первом создании экземпляра класса, а вызывается только при первом обращении к объекту свойства.

Пример:

На большинстве страниц сайта, ORM-объекты работают в режиме «чтение», т.е. они загружаются из базы, далее в системе происходит простое обращение к значениям свойств. Такие объекты теперь работают быстрее и потребляют меньше памяти, так как они не инициализируют объекты свойств.

Поддержка расширения поведения объектов извне

Представим ситуацию, что вы разрабатываете собственный модуль Custom, который выводит товары, срок годности которых скоро истекает. Ваш фронт-контроллер с помощью модели успешно сформировал выборку объектов \Catalog\Model\Orm\Product и в шаблоне вам необходимо вывести количество дней, оставшихся до истечения каждого продукта. Наиболее наглядно в шаблоне выглядел бы вызов метода {$product->getRemainingDays()}, для получения количества оставшихся дней до истечения срока годности. Однако, метода getRemainingDays нет у объекта из модуля Catalog. Что делать?

Для решения данной проблемы создан механизм расширения поведения. Данный механизм позволяет расширять собственными методами "чужие" классы, поддерживающие интерфейс RS\Behavior\AcceptBehaviorInterface. Подключенный метод можно вызывать как обычный метод объекта.

Интерфейс RS\Behavior\AcceptBehaviorInterface в данный момент поддерживают все ORM объекты, потомки от \RS\Orm\AbstractObject

Рассмотрим на примере, как добавить метод getRemainingDays() ко всем объектам класса \Catalog\Model\Orm\Product.

Создаем простейший модуль «Custom», например, с помощью генератора модулей, установленного из Marketplace. Создаем «библиотеку методов», которую мы будем подключать к «чужому классу». Библиотекой методов мы называем класс, потомок \RS\Behavior\BehaviorAbstract, который содержит набор подключаемых методов.

Пример «библиотеки методов».

Следующим шагом необходимо подключить библиотеку методов либо ко всем объектам определенного класса, либо к конкретному экземпляру класса. Рассмотрим случай расширения всех объектов.

Создаем обработчик события initialize. Это событие специально добавлено для низкоуровневых инициализаций, к коим относится расширение поведения.

Теперь мы можем вызывать метод getRemainingDays у объекта \Catalog\Model\Orm\Product в любом участке кода или в шаблоне.

Подробная информация по расширению поведения объектов представлена у нас в документации.

Переход на mysqli

Модуль mysql уже давно помечен как deprecated(устаревший) и более не будет поддерживаться в новых версиях PHP, поэтому в последнем обновлении ReadyScript перешел на использование улучшенного модуля mysqli для работы с БД. В случае если на вашем сервере не установлен соответствующий модуль, центр обновления вас предупредит о невозможности обновления.

Другие улучшения платформы

Как обычно в новый релиз вошли и многие другие мелкие улучшения платформы, например:

  • Улучшены уведомления системы.
  • Добавлено отображение полей, по которым произошла ошибка «Запись с таким идентификатором уже существует»
  • Исправлены многие незначительные ошибки
  • Добавлено событие orm.afterload…. – вызывается сразу после загрузки ORM-объекта. Сторонние модули теперь могут выполнять собственную логику при загрузке любого ORM-объекта в системе. Подробнее в документации.

09 декабря 2015 21:49, Артем Полторанин
Рассказать друзьям: