patricksavalle / slim-request-params
为 SLIM 3.x PHP 框架添加请求参数验证
This package is auto-updated.
Last update: 2024-09-12 00:29:29 UTC
README
需要 PHP 7.x
使用正则表达式验证请求 查询参数、正文参数 ($_GET 和 $_BODY) 以及 HTTP 头部。为您的 API 代码添加一层安全性和自文档功能。使用与 SLIM 用于路由段的相同语法。
示例
use SlimRequestParams\QueryParameters;
$slimapp->get('', ...)
->add(new QueryParameters([
'{text:\w+}',
'{fromdate:\date}',
'{distance:\float},0.0',
'{orderby:(name|date)},name',
'{reversed:\bool},false',
'{offset:\int},1',
'{count:\int},100',
]);
例如,这将接受此请求
GET yourdomain.com?text=airplane&fromdate=2016-10-10
例如,它将拒绝这些请求
GET yourdomain.com?text=airplane&fromdate=2016-10-10&whatever=23
GET yourdomain.com?text=airplane&fromdate=date
GET yourdomain.com?fromdate=2016-10-10&whatever=23
GET yourdomain.com?text=airplane&
GET yourdomain.com
等等。
0. 使用 Composer 安装
-
更新您的
composer.json
以需要patricksavalle/slim-request-params
。 -
运行
composer install
以将 slim-request-params 添加到您的 vendor 文件夹。{ "require": { "patricksavalle/slim-request-params": "^1.0" } }
-
在源代码中包含。
<?php require './vendor/autoload.php';
1. 将中间件添加到 SLIM 路由中
用于验证请求参数
use SlimRequestParams\QueryParameters;
$slimapp->get(...)
->add(new QueryParameters([
'{author:[\w-. @]+}',
'{orderby:\w+},id',
'{reversed:1},1',
'{offset:\int},1',
'{count:\int},100',
'{*}',
])
用于验证正文参数(客户端作为 x-www-form-urlencoded 提交)
use SlimRequestParams\BodyParameters;
$slimapp->post(...)
->add(new BodyParameters([
'{recipient:.*}',
'{sender:.*}',
'{subject:.*}',
'{timestamp:.*}',
'{token:.*}',
'{signature:.*}',
'{*}',
]));
用于验证请求头部(确保它们存在并且其值遵循特定模式)
use SlimRequestParams\RequestHeaders;
$slimapp->post(...)
->add(new RequestHeaders([
'{HTTP_REFERER:\url}',
'{HTTP_CB_SIGNATURE:.*}',
]));
用于禁止路由的参数
$slimapp->get(...)
->add(new QueryParameters)
验证规则的通用格式
{<name>:<regex>},<optional_default_value>
缺失的参数将设置为给定的默认值。
显式地将值设置为 null
/someurl?key= (leave value empty)
额外的参数将生成错误,除非使用通配符参数: {*}
,在这种情况下,额外的参数将未经验证传递。
接受 RFC 标准查询参数数组,而不是 PHP 版本
/someurl?a=10&a=11&a=12
对于类型参数和特殊格式,可以使用以下关键字代替正则表达式
\boolean
\int
\float
\date
\raw
\base64json
\url
\email
\country
\nationality
\timezone
\currency
\language
\bitcoinaddress
\moneroaddress
\xtext (a XHTML fragment only using text formatting tags, tidies up the text)
这些只是语法检查!还有一个接受“任何其他内容”的参数
{*}
可选参数应获取默认值
\optional
(见上方代码示例)
RequestHeaders 中间件始终接受“任何其他内容”。
2. 在 SLIM3.x 中安装策略以访问验证后的参数
添加将 URL、查询和 POST 参数以及请求头部组合成一个对象的策略。
$slimapp->getContainer()['foundHandler'] = function () {
return new RequestResponseArgsObject;
};
3. 调整您的路由处理程序以适应新策略
一个完整的示例。
<?php
declare(strict_types = 1);
namespace YourApi;
define("BASE_PATH", dirname(__FILE__));
require BASE_PATH . '/vendor/autoload.php';
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
use \SlimRequestParams\BodyParameters;
use \SlimRequestParams\QueryParameters;
use \SlimRequestParams\RequestResponseArgsObject;
$app = new \Slim\App;
$app->getContainer()['foundHandler'] = function () {
return new RequestResponseArgsObject;
};
$app->get('/hello/{name}', function (Request $request, Response $response, \stdClass $args) {
$name = $args->name;
$text = $args->text;
$referer = $args->referer;
$response->getBody()->write("$text, $name, $referer");
return $response;
})
->add(new RequestHeaders(['{HTTP_REFERER:\url']))
->add(new QueryParameters(['{text:[\w-.~@]+},Hello']));
$app->run();
要从应用程序的任何位置检索或检查验证后的参数,只需使用
\SlimRequestParams\QueryParameters::get();
\SlimRequestParams\BodyParameters::get();
\SlimRequestParams\RequestHeaders::get();