sqrt-pro / kernel
内核是 SQRT 框架的一部分
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-09-28 15:39:27 UTC
README
该组件包含控制器、RouteCollection 和 Kernel 的基本类。
用于地址解析的是组件 Route 和 DI Container。
控制器
所有创建的控制器都必须继承基类 Controller。每个控制器动作必须返回用于浏览器输出的结果,这可以是
- Response 对象
- Template 对象
- 数组(将被转换为 JsonResponse)
- 用于输出的值(字符串、数字等)
基类控制器有一套用于典型操作的方法
getRequest()
- 获取 Request 对象getUrl()
- 获取当前 URLgetSession($autostart = true)
- 获取 Session 对象。如果尚未显式启动,则在第一次调用时启动会话。isAjax()
- 检查是否为 Ajax 请求。是$this->getRequest()->isXmlHttpRequest()
的别名
错误
notFound()
- 抛出带有代码 404 的HttpException
forbidden()
- 抛出带有代码 403 的HttpException
重定向
redirect($url, $status = null)
- 返回 RedirectResponse 对象。默认 HTTP 状态 302。back()
- 重定向到 HTTP_REFERER。如果未指定 HTTP_REFERER,则重定向到主页。
模板引擎
系统使用基于 PHP 原生语法的模板引擎 Plates。
控制器中提供了用于处理模板的方法
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($template = null)
方法来创建Layout对象。在页面生成后,可以将其作为控制器的工作结果返回。页面内容通过setContent($content)
方法设置。
Layout辅助函数
title()
- 渲染通过setTitle
设置的<title>
标签。也可以通过setTitleTmpl
设置sprintf模板。header()
- 渲染页面头部。通过setHeader
设置。如果没有指定header,则使用title的值。keywords()
- 渲染通过setKeywords
设置的META标签keywords。如果未设置值,则默认输出title的值,但也可以通过setDefaultKeywords
指定值。description()
- 渲染META标签description。功能与keywords类似。addJS()
- 将js添加到可以通过getJS()
获取的脚本数组中。addCSS()
- 将css添加到可以通过getCSS()
获取的样式数组中。
在继承时,可以重写init()
方法进行配置。