С небольшим опозданием публикую новость о новой версии modHelpers. В ней появился менеджер ответов (Response Manager), файл пользовательских настроек, улучшены функции chunk() и snippet(), а также все классы библиотеки теперь соответствуют стандарту PSR-4 и загружаются через загрузчик композера. Теперь по порядку.

Менеджер ответов

Менеджер ответов (откликов) формирует ответ на запрос пользователя и отправляет его в браузер. По большей части он предназначен для работы в API режиме. Регистрируется он при инициализации MODX и доступен в любом месте приложения. Для работы с ним предназначена функция response(). Менеджер наследует соответствующий класс библиотеки Symfony.

Существует нисколько типов ответов. Перечислю основные:

  • Обычный ответ (класс Response). Используется для вывода текстовой информации.
  • JSON ответ (класс JsonResponse). Предназначен для вывода массива в JSON формате.
  • Файловый ответ (класс BinaryFileResponse). Вид ответа для вывода и скачивания файлов.

Список основных методов перечислен в документации. Наглядно посмотреть как это работает можно в этом видео.

Функции chunk() и snippet()

Теперь в качестве названия файла можно указывать относительный путь. Начинаться он должен с "./". Базовый путь берётся из настроек:

  • modhelpers_chunks_path для чанков. По-умолчанию в ней указан путь core/elements/chunks/.
  • modhelpers_snippets_path для сниппетов. По-умолчанию в ней указан путь core/elements/snippets/.
//Обычный чанк MODX
$output = chunk('myChunk', $placeholders); 
// Файловый чанк с полным путём
$output = chunk(MODX_CORE_PATH . 'chunks/myChunk.tpl', $params);
// Файловый чанк с относительным путём
$output = chunk('./myChunk.tpl', $params);

Файл настроек

В этой версии добавлен файл config/config.php, который возвращает массив системных настроек. Он позволяет без использования админки менять и добавлять настройки. Это особенно удобно при разработке и тестировании. Вы можете менять настройки в зависимости от условий.

$settings = [];
// Для разработчиков включаем режим отладки
if (app('modx')->user->isMember('Developers')) {
    $settings['debug'] => true;
}
return $settings;

Классы

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

Надеюсь, я всё понятно объясняю. :)

1   1968

Комментарии ()

  1. Семён 09 апреля 2018 # 0
    Сергей, приветствую!
    Возник вопрос по библиотеке modHelpers, решил написать, может быть Вы сталкивались с этим.
    В общем решил реализовать тестовое restFull приложение с бекендом на MODX, в качестве обработчиков запросов использую middlewares и всё отлично работает, но только с основными методами: GET и POST, а так как REST api
    рекомендует использовать ещё и PUT и DELETE как минимум, вот с ними то и проблема:
    При этих типах запросов в получаемых параметрах всегда пусто, менеджер запросов request->all()
    Тоже показывает, что там пусто.
    Узнал, что в Ларе уже давно с этим проблемы и там придумывают кучу костылей кто как может, я нашёл одно, вроде бы, неплохое решение, только не могу его правильно подключить в работу в моём middleware
    Если Вам не сложно можете посмотреть это решение? — gist.github.com/devmycloud/df28012101fbc55d8de1737762b70348
    А может быть Вы подскажете как лучше реализовать работу с этими типами запросов?
    Я думал в MODX есть класс для REST api, и он там есть) но только без реализации всех нужных методов, а только интерфейс… Вот и думаю заюзать Вашу библиотеку по-полной для этих целей.
    1. Сергей Шлоков 09 апреля 2018 # 0
      Методы PUT, PATCH и DELETE включаются в настройках веб-сервера. В Laravel сделали элегантное решение, если нет такой возможности — указывать в форме скрытое поле с названием метода.
      По поводу REST я бы не изобретал велосипед. Есть официальная документация. И есть готовое решение для роутинга VirtualPage.

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.