codercms/form-request

轻量级的 FormRequest 实现,灵感来源于 Laravel 和 Symfony

1.0.2 2021-11-29 22:23 UTC

This package is auto-updated.

Last update: 2024-09-29 05:35:56 UTC


README

轻量级的 FormRequest 实现,带有数据规范化。基于 symfony/validator。

在具有复杂验证规则的 10000 次迭代中的比较

  1. 比 Laravel FormRequest 快约 3.8 倍
  2. 比 Symfony Form 快约 9.7 倍

使用方法(查看测试用例获取更多示例)

<?php

declare(strict_types=1);

use Codercms\FormRequest\RequestNormalizer;
use Codercms\FormRequest\ValueNormalizer;
use Codercms\FormRequest\ValidationException;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Validation;

class TestFormRequest extends \Codercms\FormRequest\FormRequest
{
    protected function setupRules(): Assert\Collection
    {
        return new Assert\Collection(
            [
                'is_active' => new Assert\Optional(
                    new Assert\Type('bool')
                ),
            ]
        );
    }
}

$formRequest = new TestFormRequest(
    new RequestNormalizer(new ValueNormalizer()), 
    Validation::createValidator()
);

$data = [/* your incoming data here */];

try {
    $normalizedData = $formRequest->handle($data);
} catch (ValidationException $e) {
    $errors = $e->getViolationList();
    // handle errors here
}