trano / tranoutilsbundle
Trano Utils Bundle
Requires
- php: ^7.2|^8
- symfony/http-client: ^4.3|^5.0|^6|^7
- symfony/orm-pack: ^1|^2
README
TranoUtilsBundle 包含以下目的的实用工具
- 使用 .env 文件变量配置的扩展响应,带有可配置的头部
- 带有可配置 CORS 头的 JSON 响应设置器,使用 .env 文件变量
- 简单的 http 查询服务语法
- 环境变量读取器
安装
使用 composer 进行安装
composer require trano/tranoutilsbundle
使用可配置头部的扩展响应
可以使用以下指令设置响应头部
use Trano\UtilsBundle\Util\ExtendedResponse; $extendedreponse = new ExtendedResponse(); $response = new Response('test'); $responseWithHeaders = $extendedreponse->encapsulateHeaders($response);
可以使用以下环境变量设置头部值
HEADER_STRICT_TRANSPORT_SECURITY="" HEADER_CACHE_CONTROL="" HEADER_PRAGMA="" HEADER_REFERRER_POLICY="" HEADER_X_CONTENT_TYPE_OPTIONS="" HEADER_CONTENT_SECURITY_POLICY="" HEADER_X_FRAME_OPTIONS="" HEADER_X_XXS_PROTECTION=""
默认情况下,当相应的环境变量未设置时,以下安全头部值(https://owasp.org/)将被发送回客户端
Strict-Transport-Security: max-age=31536000
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Referrer-Policy: no-referrer
X-Content-Type-Options: nosniff
Content-Security-Policy: default-src 'self'
X-Frame-Options: deny
X-XXS-Protection: 1; mode=block
环境变量与安全头部之间的映射
带有可配置 CORS 头和安全头部的 JsonResponse
带有默认安全头部的 JsonResponse
使用以下代码返回一个带有默认安全头部的 JsonResponse,代码 200
use Trano\UtilsBundle\Util\ApiJsonResponse; $apijsonreponse = new ApiJsonResponse(); return $apijsonreponse->_200Ok('this is an ok results');
上述指令的结果是(注意添加了 status
、message
和 results
键)
{ "status": 200, "message": "", "results": "this is an ok results" }
默认情况下,以下安全头部值(https://owasp.org/)将被发送回客户端
Strict-Transport-Security: max-age=31536000
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Referrer-Policy: no-referrer
X-Content-Type-Options: nosniff
Content-Security-Policy: default-src 'self'
X-Frame-Options: deny
X-XXS-Protection: 1; mode=block
上述头部可以使用以下环境变量更新
HEADER_STRICT_TRANSPORT_SECURITY="" HEADER_CACHE_CONTROL="" HEADER_PRAGMA="" HEADER_REFERRER_POLICY="" HEADER_X_CONTENT_TYPE_OPTIONS="" HEADER_CONTENT_SECURITY_POLICY="" HEADER_X_FRAME_OPTIONS="" HEADER_X_XXS_PROTECTION=""
要更新 CORS 头(Access-Control.*
),请使用以下环境变量。
ALLOWED_ORIGIN="*" ALLOWED_METHODS="GET,POST" ALLOWED_HEADERS="Authorization, Content-Type"
环境变量与头部之间的映射
自定义 JsonResponse
默认情况下,ApiJsonResponse
返回一个包含 status
、message
和 results
键的 JSON。要使用自定义 JSON 数据结构更改此行为,设置
JSON_RESPONSE_TYPE=custom
因此,以下 PHP 代码
use Trano\UtilsBundle\Util\ApiJsonResponse; $apijsonreponse = new ApiJsonResponse(); return $apijsonreponse->_200Ok(["data" => 'this is an ok custom results']);
返回
{ "data": "this is an ok custom results" }
简单 Http 请求的使用
$httprequest 服务是 Trano\UtilsBundle\Util\HttpRequest
的一个实例
使用基本认证的 GET 查询
要使用 GET 返回关联数组响应,请使用以下指令。get 指令应在末尾。
$http_array_response = $this->httprequest ->addHeader('Accept', '*/*') ->addHeader('Content-Type', 'application/json') ->setBasicAuth('username', 'password') ->get('https://www.example.com/getservice');
使用数组数据和基本认证的 POST 查询
要使用 POST 返回关联数组响应,请使用以下指令。
默认情况下,$data 变量使用 application/x-www-form-urlencoded
类型发送。如果 https://www.example.com/postservice
是一个 Symfony 控制器路由,则可以使用 $request->request->get('data1');
指令获取 $data['data1']
变量。
post 指令应在末尾。 ``
$data = [ 'data1' => 'data1', 'data2' => 'data2', ]; $http_array_response = $this->httprequest ->setBasicAuth('username', 'password') ->setBodyArray($data) ->post('https://www.example.com/postservice');
请注意,由于 Symfony 请求的功能,GET 和 POST 简单查询都是同步的(这些查询会等待响应)。
环境变量读取器的使用
假设我们有一个以下的环境变量文件 .env
DATABASE_URL='mysql://aaa:bbb...'
要读取此环境变量,请使用 $env 服务,它是 Trano\UtilsBundle\Util\Env
的一个实例,如下所示
$database_url = $this->env->getEnv('DATABASE_URL');
使用 Symfony 控制器的示例
假设 .env 文件中的环境变量
ALLOWED_ORIGIN="*"
ALLOWED_METHODS="GET,POST,PUT,DELETE"
ALLOWED_HEADERS="Authorization, Content-Type"
重要:如果 .env 文件中没有设置 ALLOWED_*,则不会设置相应的 Access-Control-Allow-* 头部。
要在控制器中使用环境读取器(Trano\UtilsBundle\Util\Env
)和 JSON 响应(Trano\UtilsBundle\Util\ApiJsonResponse
),请使用以下脚本
namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\HttpFoundation\Request; use Trano\UtilsBundle\Util\ApiJsonResponse; use Trano\UtilsBundle\Util\Env; class HomeController extends AbstractController { /** * @var ApiJsonResponse */ private $apijsonresponse; /** * @var Env */ private $env; /** * ControllerTrait constructor. * @param ApiJsonResponse $apijsonresponse * @param Env $env */ public function __construct(ApiJsonResponse $apijsonresponse, Env $env) { $this->apijsonresponse = $apijsonresponse; $this->env = $env; } /** * @Route("/", methods={"GET"}) */ public function index(Request $request) { // Computes DATABASE_URL from .env file // If DATABASE_URL does not exists in .env file, it returns '' string. $database_url = $this->env->getEnv('DATABASE_URL'); // Return Json response with the http status 200. return $this->apijsonresponse->_200Ok('this is an ok results'); } // index }
上面的路由 / 读取 DATABASE_URL 环境变量并返回以下 JSON 数据。
{
"status": 200,
"message": "",
"results": "this is an ok results"
}
许可证
此包处于 MIT 许可证之下。请参阅包中的完整许可证 在此。
关于我们
TranoUtilsBundle 是 atety(https://www.atety.com)的倡议。