atournayre/entity-validation

此包最新版本(1.1.1)没有提供许可证信息。

使用 Symfony 验证器进行实体验证

1.1.1 2023-02-13 08:12 UTC

This package is auto-updated.

Last update: 2024-08-31 00:32:24 UTC


README

此组件有助于实体验证,但也可用于 DTO...

安装

Composer

composer require atournayre/entity-validation

向类添加验证

实体 / DTO / ...

namespace App\Entity;

use Atournayre\EntityValidation\ValidableEntityTrait;

class YourEntity implements ValidableEntityInterface
{
    // Your code
    
    use ValidableEntityTrait;
}

约束

创建 YourEntityConstraint(名称很重要);它必须位于您的实体 / DTO ... 相同目录中,

约束验证器

创建 YourEntityConstraintValidator(名称很重要);它必须位于您的实体 / DTO ... 相同目录中,

示例

约束验证器

<?php

namespace App\Entity\YourEntity;

use Atournayre\EntityValidation\ConstraintViolationListCollectionBuilder;
use Atournayre\EntityValidation\ConstraintValidator;
use Atournayre\EntityValidation\ConstraintViolationListCollection;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Constraints as Assert;

class YourEntityConstraintValidator extends ConstraintValidator
{
    /**
     * @throws \Exception
     */
    public function __construct()
    {
        $this->throwExceptionIfConstraintClassDoNotExists(__CLASS__);
    }

    /**
     * @param YourEntity $value
     * @param Constraint|null $constraint
     * @return ConstraintViolationListCollection
     */
    public function validate($value, Constraint $constraint = null): ConstraintViolationListCollection
    {
        $constraintViolationListCollectionBuilder = ConstraintViolationListCollectionBuilder::create();

        if (!$value instanceof YourEntity) {
            return $constraintViolationListCollectionBuilder->build();
        }

        return $constraintViolationListCollectionBuilder
            // Suppose YourEntity has method getEmail()
            ->add($value->getEmail(), new Assert\Email())
            // You can also specify propertyPath to get error attached properly in the form
            //->add($value->getEmail(), new Assert\Email(), 'email')
            ->build();
    }
}

用法

独立

$entity = new YourEntity();

// To perform manual validation
/** @var ConstraintViolationListCollection $constraintViolationListCollection */
$constraintViolationListCollection = $entity->validate();

// Check if entity has violations
$hasViolations = $constraintViolationListCollection->count() != 0;

// To get only messages
$messages = $constraintViolationListCollection->getMessages();

// To get only invalid properties
$invalidProperties = $constraintViolationListCollection->getPropertiesPaths();

// To get only invalid properties without brackets
$invalidProperties = $constraintViolationListCollection->getPropertiesPaths(true);

Symfony 表单

// Before $form->isValid(), call the line below, it will add errors to form for invalid values
EntityValidationHelper::form($form);

贡献

当然,开源是由每个人为更大的利益投入一点时间的力量所推动的。如果您想看到一个功能或添加一些您自己的快乐话语,太棒了!您可以提出请求——但是创建拉取请求是完成工作的更好方式。

无论如何,请放心提交问题或拉取请求:所有贡献和问题都受到热烈欢迎 :).