ivanstan/symfony-extend-request

添加扩展 Symfony 请求类的能力,并使用子类作为控制器方法参数类型

1.1 2022-09-17 10:43 UTC

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

下一步开发步骤

  • 支持子类中的请求验证。