giacomoto / symfony-validation
基于 Symfony Validator 的 Symfony Validation
1.1.0
2024-02-27 15:07 UTC
Requires
README
Validation Bundle 使用 Symfony 的 Validation bundle
安装
composer require giacomoto/symfony-validation
用法
创建验证约束示例: Validation/CreateUserConstraint.php
<?php namespace App\Validation\User; use Giacomoto\Bundle\GiacomotoValidationBundle\Class\BaseConstraint; use Giacomoto\Bundle\GiacomotoValidationBundle\Trait\EmailConstraintTrait; use Giacomoto\Bundle\GiacomotoValidationBundle\Trait\PasswordConstraintTrait; use Giacomoto\Bundle\GiacomotoValidationBundle\Trait\StringConstraintTrait; use Symfony\Component\Validator\Constraints\Collection; class CreateUserConstraint extends BaseConstraint { use EmailConstraintTrait; use StringConstraintTrait; use PasswordConstraintTrait; public function getConstraints(): Collection { return new Collection([ 'email' => new Optional([ ...$this->isTypeEmail(), ...$this->isUnique(User::class, 'email'), ]), 'username' => [ ...$this->isTypeString(), ...$this->isUnique(User::class, 'username'), ], 'password' => $this->isTypePassword(), 'lastName' => $this->isTypeString(), 'firstName' => $this->isTypeString(), ]); } }
示例: Valiation/UpdateEmailContraint.php
<?php namespace App\Validation\Auth; use App\Entity\User; use Giacomoto\Bundle\GiacomotoValidationBundle\Class\BaseConstraint; use Giacomoto\Bundle\GiacomotoValidationBundle\Trait\TEmailConstraints; use Giacomoto\Bundle\GiacomotoValidationBundle\Trait\TUniqueConstraints; use Symfony\Component\Validator\Constraints\Collection; class UpdateEmailConstraint extends BaseConstraint { use TEmailConstraints; use TUniqueConstraints; public function getConstraints(): Collection { // access Security Bundle $user = $this->security->getUser(); return new Collection([ 'email' => [ ...$this->isTypeEmail(), ...$this->isUnique(User::class, 'email', [ // entity is the User array found all by email "callback" => static fn($entity) => $entity->getId() != $user->getUserIdentifier() ]) ]]); } }
使用之前创建的验证器验证请求体。
示例: Controller/AuthController.php
<?php namespace App\Controller; use App\Validation\User\CreateUserConstraint; use Giacomoto\Bundle\GiacomotoValidationBundle\Exception\ValidationException; use Giacomoto\Bundle\GiacomotoValidationBundle\Service\ValidationService; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; class AuthController extends AbstractController { ... public function register( Request $request, ValidationService $validationService, ): JsonResponse { $body = $request->toArray(); if ($errors = $validationService->getErrors($body, CreateUserConstraint::class)) { // throw error } // create user ... } }
可用特性
- TBoolConstraints
- TChoiceConstraints
- TCoordinateConstraints
- TEmailConstraints
- TIntegerConstraints
- TNumericConstraints
- TStringConstraints
- TUniqueConstraints