SQRT\Kernel
Компонент содержит базовые классы контроллера, RouteCollection и Kernel., (*1)
Для адресации используется компонент Route и DI Container., (*2)
Контроллер
Все создаваемые контроллеры должны наследовать базовый класс Controller. Каждый action контроллера должен вернуть
результат для выдачи в браузер, это может быть:, (*3)
- объект Response
- объект Template
- массив (будет преобразован в JsonResponse)
- значение для вывода (строка, число, и т.п.)
Базовый класс контроллера имеет набор методов для типовых действий:, (*4)
-
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., (*5)
В контроллере предусмотрены методы для работы с шаблонами:, (*6)
-
template($name, $data = null)
- Для создания объекта шаблона
-
render($name, $data = null)
- Создание и рендер шаблона
При необходимости донастройки, можно получить объект Engine или полностью переопределить его:, (*7)
-
getTemplatesEngine()
- получить объект Engine
-
setTemplatesEngine(Engine $engine)
- задать объект Engine
В комплекте также идут два расширения для Plates, упрощающие работу с всплывающими сообщениями (FlashBag) и URL.
При использовании полного фреймворка они включены по-умолчанию, а также расширение Asset
., (*8)
При подключении расширения SQRT\Plates\Extension\URL
в шаблоне добавляется метод url()
возвращающий
текущий объект URL. По-умолчанию в фреймворке передается объект URLImmutable., (*9)
При подключении расширения SQRT\Plates\Extension\DB
в шаблоне добавляется метод db()
возвращающий менеджер БД., (*10)
При подключении расширения SQRT\Plates\Extension\User
в шаблоне добавляется метод user()
возвращающий текущего
авторизованного пользователя., (*11)
Всплывающие сообщения (Flash-messages)
В контроллере есть метод notice($message, $type = null)
добавляющий в сессию текущего пользователя всплывающее
сообщение. Такое сообщение один раз показывается пользователю и затем исчезает., (*12)
Можно получить все сообщения с помощью метода getNotices()
, являющегося альясом для $this->getSession()->getFlashBag()->all()
, (*13)
Сообщения группируются по типу, можно указывать произвольный тип, затем использовать его для оформления сообщений:, (*14)
~~~ php
// Пример стандартного шаблона для отображения уведомлений
$messages): ?>
, (*15)
= $message ?>
~~~
Для упрощения, сделаны следующие альясы для трех, наиболее часто используемых ситуаций:, (*16)
- Если
$type == null
=> info
- Если
$type === false
=> error
- Если
$type === true
=> success
Для отображения таких сообщений в шаблоне используется расширение SQRT\Plates\Extension\Notice
, в шаблоне добавляется методы:, (*17)
-
notice($template)
- рендер шаблона $template
, в который будут передана переменная $notices
содержащая все уведомления.
-
getNotices()
- получить массив всех уведомлений.
Layout
Для удобства работы с шаблоном страницы предусмотрен класс Layout - контейнер переменных для вывода в шаблон и набор хелперов., (*18)
Создать объект Layout можно вызвав метод layout($template = null)
в контроллере. После формирования страницы его можно
вернуть как результат работы контроллера. Контент страницы задается с помощью setContent($content)
., (*19)
Хелперы 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()
для настройки., (*20)