willitscale / streetlamp
一个 HTTP 路由应用程序包装器。
Requires
- php-di/php-di: ^6.4
- psr/log: ^3.0
Requires (Dev)
- phpunit/phpunit: ^11.0
- squizlabs/php_codesniffer: *
README
目录
1. 简介
Streetlamp 是一个简单的路由库,允许您快速原型化 API。这个库是基于注解路由的基本概念构建的,这在 Java 库(如 JAX-RS 和 Spring)中很常见。尽管它的工作方式受到上述 Java 库的启发,但它有一个更适合 PHP 语言的独特实现。
2. 预先条件
为了跟上现代标准,这个库是用 PHP 8.2 构建的,因此只能在 said 环境或更高版本中运行。如果有足够的需求,我可能愿意将其改回到 PHP 8,但由于它使用了属性,所以不能回退到更早的版本。最后,这个项目需要 composer 和 PSR-4 自动加载标准。
3. 设置
3.1. 安装库
只需使用 composer 命令将 Streetlamp 包含到您的项目中
composer require willitscale/streetlamp
3.2. 应用程序包装器
要运行通过 Streetlamp 包装器的应用程序,您只需要实例化 Router
类并调用 route
。Router
将使用 RouteBuilder
扫描 composer.json
中所有的命名空间(默认排除测试命名空间)并设置相应的路由。
这里是开始所需的所有代码
<?php declare(strict_types=1); require_once 'vendor/autoload.php'; use willitscale\Streetlamp\Router; (new Router())->route();
这将会使用一个简单的默认配置,如果您需要任何定制,可以使用 RouterConfig
实现。有关配置的完整指南请参阅 配置页面。
3.3 创建控制器
可以通过给类添加 RouteController
属性来定义控制器。
<?php declare(strict_types=1); namespace Example; use willitscale\Streetlamp\Attributes\Controller\RouteController; #[RouteController] class MyRouteClass { }
只有具有 RouteController
属性的类才会被扫描以查找路由。
3.4. 创建路由
在 RouteController
中的每个公共方法都可以被注解为一个路由。将方法转换为路由有三个要求
- 给方法添加 HTTP 方法属性
- 给方法或类添加路径属性
- 返回
ResponseBuilder
对象
假设我们想为请求 GET /hello HTTP/1.1
创建一个路由,我们需要给路由方法添加 Get
和 Path
属性。
代码如下所示
<?php declare(strict_types=1); namespace Example; use willitscale\Streetlamp\Attributes\Controller\RouteController; use willitscale\Streetlamp\Attributes\Path; use willitscale\Streetlamp\Attributes\Route\Method; use willitscale\Streetlamp\Builders\ResponseBuilder; use willitscale\Streetlamp\Enums\HttpMethod; use willitscale\Streetlamp\Enums\HttpStatusCode; #[RouteController] class MyRouteClass { #[Path('/hello')] #[Method(HttpMethod::GET)] public function simpleGet(): ResponseBuilder { return (new ResponseBuilder()) ->setData('world') ->setHttpStatusCode(HttpStatusCode::HTTP_OK); } }
我们也可以将 #[Path('/hello')]
应用到 RouteController
,然后控制器中定义的所有路由都会在这个路径前缀上,因此不需要为它们单独添加路径。