benycode/slim-request-deserialize

此包的最新版本(v1.3.1)没有提供许可信息。

使用 Symfony Serializer 反序列化 Slim 4 请求

v1.3.1 2024-04-14 19:09 UTC

This package is not auto-updated.

Last update: 2024-09-29 21:08:43 UTC


README

使用 Symfony Serializer 反序列化 Slim 4 请求

目录

安装

通过 Composer

$ composer require benycode/slim-request-deserialize

需要 Slim 4。

用法

创建一个实体类

declare(strict_types=1);

namespace App;

final class RequestData
{
    public string $username;

    public string $loginId;

    public string $publicKey;

    public function setUsername(string $username): self
    {
        $this->username = $username;
	return $this;
    }

    public function getUsername(): ?string 
    {
        return $this
	    ->username
	;
    }

    public function setLoginId(string $loginId): self
    {
        $this->loginId = $loginId;
	return $this;
    }

    public function getLoginId(): ?string
    {
	return $this
	    ->loginId
        ;
    }

    public function setPublicKey(string $publicKey): self
    {
	$this->publicKey = $publicKey;
	return $this;
    }

    public function getPublicKey(): ?string
    {
	return $this
	    ->publicKey
        ;
    }
}

将中间件添加到路由

use BenyCode\Slim\RequestDeserialize\RequestDeserializeMiddleware;
use Symfony\Component\Serializer\Encoder\JsonEncoder as DeserializeEncoder;
use App\RequestData;

$app = new \Slim\App();

$app->post('/api/any_end_point',function ($req, $res, $args) {
 
})
->add(new RequestDeserializeMiddleware([
    RequestData::class,
    DeserializeEncoder::FORMAT, // json encoder, but you can choice xml, yaml, csv
]))	
;

$app->run();

使用您反序列化的数据

...
public function __invoke(
    ServerRequestInterface $request,
    ResponseInterface $response
): ResponseInterface {
    $requestData = $request
        ->getAttribute('request_data')
    ;
    
    $requestData->getUsername(); // get the username
    $requestData->getLoginId(); // get the login id
    ...
}
...