Вот что сулит нам очередное обновление:

  • Добавлен менеджер сессий.
  • Функция session(), вызванная без аргументов, теперь возвращает менеджер сессий.
  • Добавлена функция dump().
  • Добавлена функция dd().
  • Добавлена функция has_parent().
  • Вызов функции user() с аргументом true возвращает объект текущего пользоваля.
  • Вызов функции resource() с аргументом true возвращает объект текущего ресурса.
  • Исправлена ошибка кэширования в функции snippet().
  • Обновлены библиотеки.
  • Переименована системная настройка modhelpers_responseManager в modhelpers_responseManagerClass.

Менеджер сессий

Менеджер сессий добавляет новые возможности для удобной работы с сессией. Раньше можно было работать с сессией только через параметры функции session(). Сейчас вызов этой функции без агрументов возвращает тот самый менеджер, у которого есть следующие методы:

  • all() — возвращает массив $_SESSION.
  • get($key, $default = null, $flat = false) — возвращает данные из сессии. Параметр $flat определяет, нужно ли использовать dot нотацию.
  • set($key, $value = null, $flat = false) — записывает данные в кэш.
  • push($key, $value) — добавляет данные в массив, хранящийся в сессии.
  • pull($key) — получает данные и удаляет их из сессии.
  • remove($key) — удаляет указанный ключ из сессии. Можно указывать массив ключей.
  • clear() — очищает сессию. Страшная вещь.
  • exists($key) — проверяет, есть ли указанный ключ в сессии.
  • has($key) — проверяет, есть ли непустой ключ.
  • flash($key, $value) — записывает в кэш данные, которые храняться только для одного запроса.
  • count() — подсчитывает количество ключей в сессии.

Особо хочу остановится на методе flash(). Это очень удобная вещь для одноразовых (так называемых флеш) сообщений. Т.е. выполнили какое-то действие, сохранили флеш сообщение, которое отобразится только один раз.

# Сниппет или класс
if ($success) {
    session()->flash('message', 'Действие выполнено успешно!');
}
...
# Страница/шаблон/чанк
{if session()->has('message')}
<div class="info">{session('message')}</div>
{/if}

Узнать больше про флэш-сообщения можно тут.

Функции отладки

Поработав с Laravel не мог не восхититься функциями dump() и dd(), которые незаменимы при отладке кода. Поэтому добавил их и сюда. Основное отличие функции dd() от dump() — её можно вызывать только один раз. Она так и расшифровывается «dump and die». Можно дампить и переменные и объекты. Вот как выглядит вызов dump($modx->user).

Результат пострящающий. Попробуйте сделать тоже самое через var_dump().

Проверка родителей

Это именно то, что делает функция has_parent(). Она по цепочке проверяет не только текущего родителя, но и всех предков. Это бывает удобно, когда нужно проверить, входит ли текущий ресурс в определённую категорию, которая может быть на несколько уровней выше. Может работать как с текущим ресурсом, так и с указанным. Id ресурса указывается в первом параметре. Для текущего ресурса его можно опустить.

// Проверяет наличие родителя с id 1 у текущего ресурса.
if (has_parent(1)) {...}

// Проверяет наличие родителя с id 1 у ресурса с id 10.
if (has_parent(10, 1)) {...}

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

Объекты текущего пользователя и текущего ресурса

Получить любой объект пользователя можно через функцию user(). Но чтобы получить объект текущего пользователя приходилось изгаляться так: user(user_id()). Теперь это можно сделать проще: user(true). Аналогично работает и функция resource().

Заключение

Несколько раз порывался прекратить разработку этой библиотеки по причине небольшой популярности. Но даже имея всего 2 сайта, на которых провожу различные эксперименты, всё равно нахожу какие-то идеи, которые жалко выбросить. Вот и мучаю себя и других частыми обновлениями. Ну и звёздочки на Github немного стимулируют.

05 февраля 2018, 22:37   320     2

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

  1. Семён 06 февраля 2018, 09:23 # +1
    Приятные новшества, благодарю за работу.
    На счёт популярности библиотеки, скорее это связанно с общей популярностью MODX, я, например пользуюсь modHelpers в каждом проекте и знакомым разработчикам рекомендую, тем кто MODX начинает осваивать.
    1. Сергей Шлоков 06 февраля 2018, 09:52 # 0
      Да я понимаю причину. У меня нет ни к кому претензий. Большинство разработчиков используют MODX как CMS, а не как CMF. Поставили пакеты и сайт готов. А для сервисов выбирают другие фреймворки.

      Кстати, сама разработка меня нисколько не напрягает. А вот писать доку к ней :\

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

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