sqrt-pro / kernel
Kernel is part of SQRT Framework
Installs: 1 352
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
pkg:composer/sqrt-pro/kernel
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: 2025-10-25 20:52:23 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()- выбрасываетHttpExceptionc кодом 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-шаблон черезsetTitleTmplheader()- рендер заголовка страницы. заданного черезsetHeader. Если header не указан, используется значение title.keywords()- рендер META-тега keywords, заданного черезsetKeywords. Если значение не задано, по-умолчанию выводится значение title, но можно указать значение черезsetDefaultKeywords.description()- рендер META-тега description. Функционально аналогичен keywords.addJS()- добавить js в массив скриптов, который можно получить черезgetJS().addCSS()- добавить css в массив стилей, который можно получить черезgetCSS().
При наследовании можно переопределить метод init() для настройки.