netolabs/php-lambda-router

使用AWS Lambda处理器将请求路由到控制器操作

v0.1.0 2020-08-27 08:23 UTC

This package is auto-updated.

Last update: 2024-08-29 05:43:25 UTC


README

php-lambda-runtime库提供的简单基于处理器的路由中间件。

安装

从项目的根目录运行composer require netolabs/php-lambda-router netolabs/php-lambda-runtime

使用路由中间件

路由中间件用于将Lambda路由到控制器和操作,类似于MVC框架。不同之处在于,我们不是基于请求路径进行路由,而是使用Lambda处理器的名称。这使我们能够在同一存储库中拥有多个Lambda函数,并允许代码的重用。

处理器的名称应采用"controller.action"的格式。内部,路由器将尝试加载控制器并检查操作方法是否存在。如果不存在,它将请求传递给队列中的下一个中间件;通常是回退或404中间件。

例如:如果处理器名称是helloworld.get,路由器将尝试加载\App\Controller\HelloworldController类并执行getAction($request)方法。

默认命名空间为\App\Controller\,但可以通过构造函数参数进行配置。

示例

添加路由中间件

在这个例子中,我们使用路由将Lambda路由到控制器和操作。它包括异常处理程序和回退,如果路由不匹配则返回404响应。在您的app.php中使用以下代码

<?php
$app = \Neto\Lambda\Application\AppFactory::create();
$app->addMiddleware(new \Neto\Lambda\Middleware\ExceptionHandler(true))
    ->addMiddleware(new \Neto\Lambda\Middleware\HandlerRouter(getenv('_HANDLER')))
    ->addMiddleware(new \Neto\Lambda\Middleware\FileNotFound())
    ->run();

创建控制器

控制器使用Lambda处理器名称自动加载,并必须符合PSR-4标准。

mkdir -p src/App/Controller
touch src/App/Controller/AppController.php

src/App/Controller/AppController.php

<?php
namespace App\Controller;

use GuzzleHttp\Psr7\Response;
use Neto\Lambda\Controller\AbstractController;

class AppController extends AbstractController
{
    public function helloworldAction(RequestInterface $request)
    {
        return new Response(200, [], '<h1>Hello world!</h1>');
    }
}

发送它

现在使用vendor/bin/invoke -h app.helloworld运行它。您会注意到我们使用"app.helloworld"作为处理器名称 - 这用于解析控制器类(AppController)和操作方法(HelloworldAction)。

PSR-11容器和自动装配

路由中间件和AbstractController都实现了ContainerAwareInterface。如果您想使用DI容器,只需将其注入到HandlerRouter中即可,无论是通过构造函数还是方法。当设置容器对象时,它也将自动注入到实例化的控制器中。
因为此库使用PHP-DI的invoker,您可以在任何顺序为操作方法使用类型参数,我们将尝试使用参数类型或参数名称在您的PSR-11容器中解析它们。

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件