dotkernel/dot-controller

DotKernel控制器,类似于具有插件支持的中间件组件

3.5.1 2024-04-05 09:08 UTC

This package is auto-updated.

Last update: 2024-09-03 05:40:38 UTC


README

这是DotKernel的控制器包,可以在DotKernel或Mezzio应用中用作中间件。它提供了类似于Laminas控制器组件的动作控制器的基本类。虽然它更轻量,但支持控制器插件和事件监听器。

OSS Lifecycle PHP from Packagist (specify version)

GitHub issues GitHub forks GitHub stars GitHub license

Build Static codecov

SymfonyInsight

安装

通过执行以下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处理)。