dotkernel / dot-controller
DotKernel控制器,类似于具有插件支持的中间件组件
3.5.1
2024-04-05 09:08 UTC
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- dotkernel/dot-event: ^3.2.0
- laminas/laminas-servicemanager: ^3.11.2
- mezzio/mezzio-helpers: ^5.8.0
- mezzio/mezzio-template: ^2.4.0
- psr/http-message: ^1.0 || ^2.0
Requires (Dev)
- laminas/laminas-coding-standard: ^2.5
- laminas/laminas-diactoros: ^3.0
- phpunit/phpunit: ^10.2
- vimeo/psalm: ^5.13
README
这是DotKernel的控制器包,可以在DotKernel或Mezzio应用中用作中间件。它提供了类似于Laminas控制器组件的动作控制器的基本类。虽然它更轻量,但支持控制器插件和事件监听器。
安装
通过执行以下Composer命令安装dot-controller
$ composer require dotkernel/dot-controller
用法
中间件控制器作为多个路由的处理程序。已经制定了某些约定
- 在路由数组中注册控制器,就像任何mezzio中间件一样。要求是在路由的任何位置定义一个
action
路由参数(可能是可选的)(例如/user[/{action}]
) - 将action参数值转换为控制器内的方法名。删除下划线、点和行字符,并将动作名称转换为以字符串
Action
后缀的驼峰式。例如,一个路由和动作对如/user/forgot-password
将被转换为方法forgotPasswordAction
。 - 如果没有在URI中指定,默认的动作值是
index
,因此您应该在控制器中始终定义一个indexAction
以显示默认页面或重定向。
为了创建基于动作的控制器,您必须扩展抽象类DotKernel\DotController\AbstractActionController
示例
创建一个带有默认动作和注册动作的UserController。将处理路由/user
和/user/register
use DotKernel\DotController\AbstractActionController; class UserController extends AbstractActionController { public function indexAction() { //... } public function registerAction() { //... } }
然后在文件RoutesDelegator.php
中将此控制器注册为带路由的中间件,就像常规中间件一样。
//Example from a DotKernel RoutesDelegator $app->route( '/user[/{action}]', UserController::class, [RequestMethodInterface::METHOD_GET, RequestMethodInterface::METHOD_POST], 'user' );
同一路由的多个控制器
用例:您在某个包内部定义了一个控制器,并具有默认动作。您想添加属于同一控制器名称(或更准确地说,是路由名称)的动作。您想在不需要扩展包提供的控制器的情况下这样做。在这种情况下,您可以这样做
- 创建自己的控制器,独立于包的控制器,并添加更多动作
- Mezzio允许您为路由定义一组中间件,因此您可以在包的控制器之前注册此控制器
现在,当有请求到达此路由时,您的控制器将首先运行。DotKernel控制器被设计为忽略无法匹配其任何方法的请求,因此如果没有动作匹配,它将调用下一个中间件,在我们的例子中,是第二个控制器。如果这是最后一个控制器,并且动作不匹配,它将转到默认的404未找到页面(由NotFoundDelegate处理)。