ivanstan / symfony-extend-request
添加扩展 Symfony 请求类的能力,并使用子类作为控制器方法参数类型
1.1
2022-09-17 10:43 UTC
Requires
- php: >=8.0
- symfony/framework-bundle: ^4.0|5.0|^6.0
- symfony/yaml: ^4.0|5.0|^6.0
Requires (Dev)
- phpunit/php-code-coverage: ^9.2
- phpunit/phpunit: ^9
- symfony/test-pack: ^1.0
This package is auto-updated.
Last update: 2024-09-17 15:16:09 UTC
README
此包允许用户使用扩展 Symfony\Component\HttpFoundation\Request
的类来注释控制器方法类型,并在子类中实现自定义逻辑。
示例
use App\Request\ExtendedRequest; class ProductsController extends AbstractController { #[Route('product/search')] public function search(SearchProductsRequest $request): JsonResponse { return new JsonResponse([ 'name' => $request->getName(), ]); } }
namespace App\Request; use Symfony\Component\HttpFoundation\Request; class SearchProductsRequest extends Request { public function getName(): string { return $this->get('name'); } }
安装
composer require ivanstan/symfony-extend-request
将以下内容添加到项目的 bundle.php
<?php return [ Ivanstan\SymfonyExtendRequest\SymfonyExtendRequestBundle::class => ['all' => true], ];
将请求作为服务
扩展 Symfony\Component\HttpFoundation\Request
的类现在可以被提升为完全功能的 Symfony 服务,具有所有的依赖注入特性。由于请求构造函数专门用于查询参数、头部等,建议在扩展请求类中使用 Required
属性注入其他服务,例如
<?php namespace App\Request; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Contracts\Service\Attribute\Required; class ExtendedRequest extends Request { protected LoggerInterface $logger; #[Required] public function setLogger(LoggerInterface $logger):void { $this->logger = $logger; } }
如果启用了自动装配,这将实际生效。
测试
运行: composer test
下一步开发步骤
- 支持子类中的请求验证。