troublete / monty
类似于Sinatra的框架,专注于快速响应和可靠性。
Requires
- php: >=7.0
- nikic/fast-route: ~1.2
- symfony/http-foundation: ~3.3
Requires (Dev)
- codeception/codeception: ~2.3
- mockery/mockery: ~0.9
This package is not auto-updated.
Last update: 2024-09-15 03:39:36 UTC
README
类似于Sinatra的框架,专注于快速响应和可靠性。
示例设置
$ composer require troublete/monty
<?php require_once 'path/to/vendor/autoload.php'; $application = new \Monty\Application(); $application->get( '/request[/{someId}]', function (\Monty\Request $req, \Monty\Response $res, $someId) { // do some awesome stuff return new \Symfony\Component\HttpFoundation\JsonResponse([]); } );
路由
路由解析基于由 @nikic 创建的 FastRoute 包,因此大部分情况下应该可以按照FastRoute的指定定义路由。通过 PCRE 进行路由匹配,分隔符设置为 @
,因此当设置以 @
为分隔符的用户定义正则表达式匹配时需要注意。路由定义允许在定义末尾使用标记为 []
的变量部分。由于这是可能的,匹配将尝试多个正则表达式,按复杂性递减的顺序,并在找到第一个匹配模式时返回。
有效路由
/search/{searchId} => routing with parameter
/search/{searchId:\d+} => routing with parameter with defined regex
/search[/{searchId}] => routing with optional parameter
/search/index[es] => routing with optional part
无效路由
/search/index[es]/{searchId} => optional chunk in the middle
请求处理
处理定义将按照注册顺序处理,一旦与接收到的请求匹配,它将调度、返回并因此关闭进程。
此外,Monty 还被设计为以请求和响应为中心,遵循一个教条,即一个应用程序对一个请求的处理只会发生一次,因此在整个生命周期中需要的一切(或应该附加)都包含在请求或响应对象中。
定义上的处理器是一个 callable
数组,并且将在定义匹配时按顺序同步执行。在前后注册的中间件将集成在这个“调用堆栈”中。
如果在处理器中返回了响应对象,它将被解释为进程响应,并且不能重置(但可以修改)。
应用程序
应用程序是 Monty 的主要组件。它将处理路由处理器的注册、中间件的注册以及请求和响应的附加设置。它通常包含四个不同的用例。访问当前请求过程的请求或响应对象、注册路由处理器和注册在生命周期中执行的中间件。
除了用例方法外,它还包含了一个别名方法的接口,以使您编写的代码更加易于理解和简洁。
方法
$app->handle($methods, $route, ...$handlers)
此方法为特定路由注册新的请求处理器,针对请求方法集合应调度。
参数
示例
// ... $app->handle( ['GET'], '/index', function ($req, $res) { /*...*/ }, function ($req, $res) { /*...*/ }, function ($req, $res) { /*...*/ } // ... ); // ...
别名
$app->middleware($placing, ...$handlers) : \Monty\Application
此方法注册将在不考虑请求方法的情况下执行的其他处理器。
参数
示例
// ... $app->middleware( \Monty\Application::PREPEND, function ($req, $res) { /*...*/ }, function ($req, $res) { /*...*/ }, function ($req, $res) { /*...*/ } // ... ); // ...
别名
$app->getRequest() : \Monty\Request
此方法检索当前请求对象。
$app->getResponse() : : \Monty\Response
此方法检索当前响应对象。
请求
请求对象是过程的中心。它包含在请求期间添加属性和服务的能力。通过这种方式,处理请求对象保持小巧,并且仅在需要时注册必要的依赖项。
方法
$req->clientIp() : string
获取请求IP的方法。
$req->contentType() : string
获取请求的内容类型头部值的方法。
$req->files() : \Symfony\Component\HttpFoundation\FileBag
获取 $_FILES 参数的方法。
$req->get(...$parameters)
此方法可以用来获取设置到请求中的属性或服务。
参数
示例
// ... $request->get('logger', new SomeDefault()); $request->get('property', 'some default value'); // ...
$req->getRawRequest() : \Symfony\Component\HttpFoundation\Request
获取嵌入到 \Monty\Request 对象中的原始请求的方法。
$req->httpHost() : string
获取包括协议在内的http主机的方法。
$req->isMethod($method) : boolean
检查请求方法是否为特定值的方法。
参数
$req->isSecure() : boolean
检查发送的请求是否安全(HTTPS/SSL)的方法。
$req->path() : string
获取请求路径的方法。
$req->previousReturn() : mixed
获取堆栈中上一个处理器的返回值的方法。
$req->query() : \Symfony\Component\HttpFoundation\ParameterBag
获取 $_GET 参数的方法。
$req->requestMethod() : string
获取请求方法的方法。
$req->request() : \Symfony\Component\HttpFoundation\ParameterBag
获取 $_POST 参数的方法。
$req->routeParameters() : \Symfony\Component\HttpFoundation\ParameterBag
获取与路由处理器实例匹配的路由参数值的方法。
$req->set(...$parameters) : \Monty\Request
此方法可用于将类实例或属性添加到请求中,这些可以在调用堆栈中访问。通常,该方法至少需要两个参数,第一个是属性/服务的id作为字符串,第二个是标量或对象值。
不允许将数组设置为请求属性,以避免代码混乱和资源批量处理。
参数
示例
// ... $request->set('logger', new SomeLogger()); // valid $request->set('property', 'some value'); // valid $request->set('not_possible', []); // invalid // ...
$req->setPreviousReturn($value) : \Monty\Request
设置上一个处理器的返回值的方法。
参数
$req->updateRouteParams($params) : \Monty\Request
更新设置到请求中的路由参数的方法。
参数
响应
响应对象通常假设可以自行解决 - 意味着它应该处理响应定义应该如何在应用程序响应中渲染。您可以使用简单的 Symfony Http 组件响应对象,或者定义自己的,这些对象必须实现 \Monty\ResponseInterface。
处理器
处理器定义为在路由处理器定义或中间件中注册的 callable
。
处理器可以是简单的 lambda 函数、闭包对象、类、... 实际上可以是任何可以调用的东西。这里没有限制。
© 2017 Willi Eßer