控制器是MVC架构的一部分(用于网页的Action-Domain-Responder),负责进一步管理已经由路由器识别的请求的处理,但不应包含业务逻辑。
在HLEB2框架中,控制器是通过controller()方法绑定到路由的普通处理类。
该方法指向控制器类及其可执行的方法。
在匹配时,框架会创建该类的实例并调用该方法。
控制器类必须继承自Hleb\Base\Controller。
框架根据控制器的namespace在/app/Controllers/文件夹中查找控制器。 以下是默认控制器的代码:
在示例中,控制器的'index'方法返回一个由view()函数生成的View对象,并指向/resources/views/文件夹中的模板。
将使用模板/resources/views/default.php
这是一个简单的示例,因为可以以类似的方式在路由中使用此函数。
函数的第一个参数指定模板,第二个参数是用于传递变量及其值到模板的命名数组,第三个参数可以指定响应状态码的数值。
如果在控制器中使用此示例,将调用模板/resources/views/template/file.php。
在文件中,将可用到变量$title和$description及其对应的值:
如果模板文件的扩展名不是.php,例如.twig模板,则需要在函数中重命名模板路径,指定扩展名。
除了之前提到的 View 对象,控制器方法还可以返回其他类型的值:
string|int|float - 这些类型将被转换为字符串并以其原始形式输出为文本。
array - 返回的数组将被转换为 JSON 字符串。
bool - 如果返回 false,则会显示标准的404错误。
具有 Hleb\Reference\ResponseInterface 接口的对象(来自容器)将被转换为响应。
具有 Psr\Http\Message\ResponseInterface 接口的对象将被转换为响应。
При ответе массивом как JSON на запрос GET может возникнуть XSSI перехват JSON, поэтому лучше отправить именованный массив, который преобразуется в объект как JSON.
框架可能与动态路由一起定义与 URL 的命名部分相匹配的值。 例如,对于以下路由:
变量 $version 和 $page 可以插入到控制器方法 'resource' 中。
一个控制器可以返回另一个的数据显示,但返回的数据类型必须匹配。
没有为控制器分配的事件将应用于这个嵌套的控制器。
除了复制和修改演示文件 DefaultController.php 之外,使用控制台命令创建控制器也是一个简单的方法。
$php console --add controller ExampleController
该命令将在 /app/Controllers/ExampleController.php 创建新的控制器模板。
可以使用类的其他合适名称。
框架还允许为此命令创建 自定义默认模板。