数字革命/symfony-request-validation

为symfony提供自动请求验证

v2.4.0 2023-12-07 12:42 UTC

This package is auto-updated.

Last update: 2024-08-31 00:28:12 UTC


README

Minimum PHP Version Minimum Symfony Version Run tests

Symfony Request Validation

Symfony的请求验证组件。在不使用整个Symfony表单的情况下简化请求属性的验证。

安装

通过以下方式将库作为依赖项包含到您的项目中:

composer require "digitalrevolution/symfony-request-validation"

更新 /config/bundles.php

return [
    ...
    DigitalRevolution\SymfonyRequestValidation\Bundle\RequestValidationBundle::class => ['all' => true],
];

使用

  1. 创建一个名为 ExampleRequest 的类,该类继承自 AbstractValidatedRequest 类。
  2. 配置您自己的 ValidationRules。有关规则的更多信息,请参阅验证简写库
  3. 确保您的 ExampleRequest 类已在您的 Symfony 项目中注册为 服务
use DigitalRevolution\SymfonyRequestValidation\AbstractValidatedRequest;
use DigitalRevolution\SymfonyRequestValidation\ValidationRules;

class ExampleRequest extends AbstractValidatedRequest
{
    protected function getValidationRules(): ValidationRules
    {
        return new ValidationRules([
            'request' => [
                'productId'   => 'required|int|min:0',
                'productName' => 'required|string|between:50,255'
            ]
        ]);
    }

    public function getProductId(): int
    {
        return $this->request->request->getInt('productId');
    }
    
    public function getProductName(): string
    {
        return $this->request->request->getString('productName');
    }
}

剩下的就是在您的 Controller 中使用 ExampleRequest 类,并且它只会在请求验证通过时被调用。

class ExampleController
{
    /**
     * @Route("/", name="my_example")
     */
    public function index(ExampleRequest $request): Response
    {
        return ...;
    }
}

无效请求处理

默认情况下,如果请求无效,则会抛出 InvalidRequestException。如果您希望有不同的行为,则覆盖 handleViolations 方法。

class ExampleRequest extends AbstractValidatedRequest
{
    ...
    
    protected function handleViolations(ConstraintViolationListInterface $violationList): void
    {
        $renderer = new ViolationListRenderer($violationList);
        $this->logger->error($renderer->render());
    }
}

注意:如果在 handleViolations 中没有抛出异常,您将始终在您的 Controller 中收到请求。使用 Request->isValid() 验证请求是否有效。

关于我们

在123inkt(Digital Revolution B.V.的一部分),每天有超过50名开发专业人士致力于改进我们的内部ERP和我们的几家商店。您想加入我们吗?我们正在寻找开发者