carthage / elissa-bundle
Symfony 扩展包,提供对 PSR-7 和 PSR-15 的开箱即用支持。
1.0.1
2023-07-26 19:19 UTC
Requires
- php: ^8.1|^8.2
- laminas/laminas-diactoros: ^2.0|^3.0
- psr/http-factory: ^1.0
- psr/http-message: ^2.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
- symfony/config: ^6.0
- symfony/dependency-injection: ^6.0
- symfony/http-kernel: ^6.0
- symfony/psr-http-message-bridge: ^2.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.22
- roave/security-advisories: dev-latest
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!如有任何疑问或建议,请随时提出问题或提交拉取请求。祝您编码愉快!