sqrt-pro / kernel
Kernel is part of SQRT Framework
Installs: 1 352
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 3
Forks: 0
Open Issues: 0
Requires
- league/plates: ~3.0
- sqrt-pro/db: *
- sqrt-pro/url: dev-master
- symfony/debug: ~2.6
- symfony/event-dispatcher: ~2.6
- symfony/http-foundation: ~2.6
- symfony/http-kernel: ~2.6
This package is not auto-updated.
Last update: 2024-12-21 16:39:32 UTC
README
Компонент содержит базовые классы контроллера, RouteCollection и Kernel.
Для адресации используется компонент Route и DI Container.
Контроллер
Все создаваемые контроллеры должны наследовать базовый класс Controller. Каждый action контроллера должен вернуть результат для выдачи в браузер, это может быть:
- объект Response
- объект Template
- массив (будет преобразован в JsonResponse)
- значение для вывода (строка, число, и т.п.)
Базовый класс контроллера имеет набор методов для типовых действий:
getRequest()
- получить объект RequestgetUrl()
- получить текущий URLgetSession($autostart = true)
- получить объект Session. Сессия стартует при первом вызове, если она явно не была запущена ранее.isAjax()
- проверка, что сделан Ajax-запрос. Альяс для$this->getRequest()->isXmlHttpRequest()
Ошибки
notFound()
- выбрасываетHttpException
с кодом 404forbidden()
- выбрасывает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()
- получить объект EnginesetTemplatesEngine(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()
для настройки.