netolabs / php-lambda-router
使用AWS Lambda处理器将请求路由到控制器操作
Requires
- php: >=7.3
- netolabs/simple-container: 0.2.3
- php-di/invoker: ^2.0
- psr/container: ^1.0
- psr/http-message: 1.0.*
- psr/http-server-handler: 1.0.*
- psr/http-server-middleware: 1.0.*
- psr/log: ^1.1
Requires (Dev)
- phake/phake: 3.1.*
- phpunit/phpunit: 7.5.*
- squizlabs/php_codesniffer: 2.*
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)。有关更多信息,请参阅许可证文件。