kununu / controller-validation-bundle
此包的最新版本(1.0.0)没有提供许可信息。
使用Symfony验证器通过注解验证控制器请求
1.0.0
2019-06-18 11:43 UTC
Requires
- php: >=5.5.0
- doctrine/annotations: ^1.0
- doctrine/common: ^2.0
- symfony/dependency-injection: ^2.7|^3.0|^4.0
- symfony/http-kernel: ^2.7|^3.0|^4.0
- symfony/validator: ^2.7|^3.0|^4.0
Requires (Dev)
- matthiasnoback/symfony-dependency-injection-test: 0.*
- phpunit/phpunit: ^4.8
- sensio/framework-extra-bundle: ^3.0
- symfony/symfony: ^2.7|^3.0|^4.0
This package is not auto-updated.
Last update: 2021-02-24 04:50:51 UTC
README
此包引入了@Validator注解,允许使用Symfony验证器约束和注解来验证请求数据。通常Symfony在实体中定义断言,使用此库,我们只需对请求数据使用集合约束,它将自动捕获它,多亏了@Validator注解。
安装
步骤1:安装包
composer require kununu/controller-validation-bundle:dev-master
步骤2:启用包
// config/bundles.php return [ // ... Kununu\ControllerValidationBundle\KununuControllerValidationBundle::class => ['all' => true], ];
配置
约束命名空间
您需要定义约束所在的命名空间
# config/packages/kununu_controller_validation.yml kununu_controller_validation: constraints_namespace: App\Validator\Constraints
自定义验证异常
您可以根据需要定义自己的异常。否则将使用默认的ValidationException
# app/config/config.yml kununu_controller_validation: validation_exception: class: App\Exception\ValidationException message: Validation error code: 400
监听器优先级
ControllerValidatorListener默认以优先级0注册。在某些情况下,需要更早或更晚地触发事件。这就是为什么添加了listener_priority配置选项。
优先级越高,事件触发越早。
# app/config/config.yml kununu_controller_validation: listener_priority: 1
⚠️警告: ⚠️ 如果您使用@ParamConvert注解,并且使用任何自定义ParamConverters,请不要将优先级更改为小于0。该注解将在paramConverter调用后尝试验证请求,如果请求无效,实际转换可能会失败。如果绝对必要,请确保在执行其他任何操作之前,在您的自定义转换器中手动验证数据。
注意:您可以使用控制台命令获取所有已注册事件的列表:bin/console debug:event-dispatcher
用法
约束
<?php // src/Bundle/Validator/Constraints/ExampleConstraints.php namespace App\Validator\Constraints; use Symfony\Component\Validator\Constraints; use Symfony\Component\Validator\Constraints\CollectionValidator; class ExampleConstraints extends Constraints\Collection { public function __construct() { parent::__construct([ 'id' => [ new Constraints\NotBlank(), ], 'name' => new Constraints\NotBlank(), 'example_id' => [ new Constraints\NotBlank(), new Constraints\Range(['min' => 0,'max' => 42]), ], ]); } public function validatedBy() { return CollectionValidator::class; } }
控制器
<?php // src/App/Controller/ExampleController.php namespace App\Controller\ExampleController; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Kununu\ControllerValidationBundle\Annotation\Validator; class ExampleController extends Controller { /** * @param Request $request * * @Validator("ExampleConstraints") */ public function exampleAction(Request $request) { // ... } }