sqrt-pro/kernel

Kernel is part of SQRT Framework

0.1 2015-05-31 16:30 UTC

This package is not auto-updated.

Last update: 2024-04-13 13:09:48 UTC


README

Компонент содержит базовые классы контроллера, RouteCollection и Kernel.

Для адресации используется компонент Route и DI Container.

Контроллер

Все создаваемые контроллеры должны наследовать базовый класс Controller. Каждый action контроллера должен вернуть результат для выдачи в браузер, это может быть:

  • объект Response
  • объект Template
  • массив (будет преобразован в JsonResponse)
  • значение для вывода (строка, число, и т.п.)

Базовый класс контроллера имеет набор методов для типовых действий:

  • getRequest() - получить объект Request
  • getUrl() - получить текущий URL
  • getSession($autostart = true) - получить объект Session. Сессия стартует при первом вызове, если она явно не была запущена ранее.
  • isAjax() - проверка, что сделан Ajax-запрос. Альяс для $this->getRequest()->isXmlHttpRequest()

Ошибки

  • notFound() - выбрасывает HttpException с кодом 404
  • forbidden() - выбрасывает HttpException c кодом 403

Редирект

  • redirect($url, $status = null) - возвращает объект RedirectResponse. По-умолчанию HTTP статус 302.
  • back() - редирект на HTTP_REFERER. Если HTTP_REFERER не указан, возвращает на главную страницу.

Шаблонизатор

В системе используется шаблонизатор Plates, основанный на нативном синтаксисе PHP.

В контроллере предусмотрены методы для работы с шаблонами:

  • template($name, $data = null) - Для создания объекта шаблона
  • render($name, $data = null) - Создание и рендер шаблона

При необходимости донастройки, можно получить объект Engine или полностью переопределить его:

  • getTemplatesEngine() - получить объект Engine
  • setTemplatesEngine(Engine $engine) - задать объект Engine

В комплекте также идут два расширения для Plates, упрощающие работу с всплывающими сообщениями (FlashBag) и URL. При использовании полного фреймворка они включены по-умолчанию, а также расширение Asset.

При подключении расширения SQRT\Plates\Extension\URL в шаблоне добавляется метод url() возвращающий текущий объект URL. По-умолчанию в фреймворке передается объект URLImmutable.

При подключении расширения SQRT\Plates\Extension\DB в шаблоне добавляется метод db() возвращающий менеджер БД.

При подключении расширения SQRT\Plates\Extension\User в шаблоне добавляется метод user() возвращающий текущего авторизованного пользователя.

Всплывающие сообщения (Flash-messages)

В контроллере есть метод notice($message, $type = null) добавляющий в сессию текущего пользователя всплывающее сообщение. Такое сообщение один раз показывается пользователю и затем исчезает.

Можно получить все сообщения с помощью метода getNotices(), являющегося альясом для $this->getSession()->getFlashBag()->all()

Сообщения группируются по типу, можно указывать произвольный тип, затем использовать его для оформления сообщений:

// Пример стандартного шаблона для отображения уведомлений
<?php foreach ($notices as $type => $messages): ?>
  <?php foreach ($messages as $message): ?>
    <div class="notice notice-<?= $type ?>"><?= $message ?></div>
  <?php endforeach ?>
<?php endforeach ?>

Для упрощения, сделаны следующие альясы для трех, наиболее часто используемых ситуаций:

  • Если $type == null => info
  • Если $type === false => error
  • Если $type === true => success

Для отображения таких сообщений в шаблоне используется расширение SQRT\Plates\Extension\Notice, в шаблоне добавляется методы:

  • notice($template) - рендер шаблона $template, в который будут передана переменная $notices содержащая все уведомления.
  • getNotices() - получить массив всех уведомлений.

Layout

Для удобства работы с шаблоном страницы предусмотрен класс Layout - контейнер переменных для вывода в шаблон и набор хелперов.

Создать объект Layout можно вызвав метод layout($template = null) в контроллере. После формирования страницы его можно вернуть как результат работы контроллера. Контент страницы задается с помощью setContent($content).

Хелперы Layout:

  • title() - рендер тега <title>, заданного через setTitle. Также можно задать sprintf-шаблон через setTitleTmpl
  • header() - рендер заголовка страницы. заданного через setHeader. Если header не указан, используется значение title.
  • keywords() - рендер META-тега keywords, заданного через setKeywords. Если значение не задано, по-умолчанию выводится значение title, но можно указать значение через setDefaultKeywords.
  • description() - рендер META-тега description. Функционально аналогичен keywords.
  • addJS() - добавить js в массив скриптов, который можно получить через getJS().
  • addCSS() - добавить css в массив стилей, который можно получить через getCSS().

При наследовании можно переопределить метод init() для настройки.