troublete/monty

类似于Sinatra的框架,专注于快速响应和可靠性。

1.0.0 2017-07-30 15:43 UTC

This package is not auto-updated.

Last update: 2024-09-15 03:39:36 UTC


README

类似于Sinatra的框架,专注于快速响应和可靠性。

Build Status

示例设置

$ 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