carthage/elissa-bundle

Symfony 扩展包,提供对 PSR-7 和 PSR-15 的开箱即用支持。

安装: 28

依赖: 0

建议者: 0

安全性: 0

星星: 22

关注者: 3

分支: 0

开放问题: 0

类型:symfony-bundle

1.0.1 2023-07-26 19:19 UTC

This package is auto-updated.

Last update: 2024-08-29 15:23:13 UTC


README

Carthage 的 Elissa Bundle 为您的 Symfony 项目提供开箱即用的 PSR-7 和 PSR-15 支持。

该软件包允许开发者编写 PSR-15 处理器和中间件,这些处理器和中间件会自动标记并准备好用作控制器。

它还提供了对所有 PSR-7 工厂的便捷访问,并支持第三方供应商包中间件的平滑集成。

安装 🚀

使用以下命令使用 Composer 安装 Elissa Bundle

composer require carthage/elissa-bundle

启用 Bundle 🎚

要在您的 Symfony 项目中启用此 Bundle,请在 config/bundles.php 文件中添加以下行

return [
    //...
    Carthage\ElissaBundle\ElissaBundle::class => ['all' => true],
    //...
];

用法 💼

PSR-7 工厂 🏭

Elissa Bundle 随带自动注入和预配置的 PSR-7 工厂。您可以在服务中方便地创建 PSR-7 对象而无需任何额外配置。

<?php

declare(strict_types=1);

namespace App\Service;

use Psr\Http\Message\StreamFactoryInterface;
use Psr\Http\Message\ResponseFactoryInterface;
use Psr\Http\Message\RequestFactoryInterface;
use Psr\Http\Message\ServerRequestFactoryInterface;
use Psr\Http\Message\UriFactoryInterface;
use Psr\Http\Message\UploadedFileFactoryInterface;

final class MyService
{
    public function __construct(
        private StreamFactoryInterface $streamFactory,
        private ResponseFactoryInterface $responseFactory,
        private RequestFactoryInterface $requestFactory,
        private ServerRequestFactoryInterface $serverRequestFactory,
        private UriFactoryInterface $uriFactory,
        private UploadedFileFactoryInterface $uploadedFileFactory,
    ) {}
}

PSR-15 处理器 🎛

安装并启用 Elissa Bundle 后,编写 PSR-15 处理器变得轻而易举。这些处理器将自动在您的 Symfony 项目中作为控制器运行。

<?php

declare(strict_types=1);

namespace App\Handler;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ResponseFactoryInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\StreamFactoryInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Symfony\Component\Routing\Annotation\Route;

final class HomeHandler implements RequestHandlerInterface
{
    public function __construct(
        private StreamFactoryInterface $streamFactory,
        private ResponseFactoryInterface $responseFactory,
    ) {}

    #[Route('/', name: 'home')]
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $body = $this->streamFactory->createStream('Hello World!');

        return $this->responseFactory->createResponse(200)
            ->withBody($body);
    }
}

PSR-15 中间件 🛠

就像处理器一样,您可以编写 PSR-15 中间件,它们将自动运行。

<?php

declare(strict_types=1);

namespace App\Middleware;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ResponseFactoryInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\StreamFactoryInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;

final class MadeWithMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $response = $handler->handle($request);
        
        return $response->withHeader('X-Made-With', 'Love');
    }
}

配置 ⚙

Elissa Bundle 被设计为最小化配置,但如果您需要注册来自第三方供应商的额外 PSR-15 中间件,您可以使用 elissa.middleware 服务标签。

# config/services.yaml

services:
    Some\External\ServiceMiddleware:
        tags:
            - { name: elissa.middleware }

行为准则 🤝

我们的社区遵循行为准则,并期望所有贡献者都遵守它。有关更多详细信息,请参阅 行为准则

贡献 🎁

Elissa Bundle 非常欢迎开源社区的贡献。我们珍视每一项贡献,无论大小。

许可 📜

Elissa Bundle 在 MIT 许可证下分发。有关更多信息,请参阅 许可证

希望您喜欢使用 Elissa Bundle!如有任何疑问或建议,请随时提出问题或提交拉取请求。祝您编码愉快!