sqrt-pro/kernel

内核是 SQRT 框架的一部分

0.1 2015-05-31 16:30 UTC

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() - 获取当前 URL
  • getSession($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()方法进行配置。