ibekiaris/zf2-annotation-validator

为 doctrine 实体添加验证注解

dev-master / 0.1.x-dev 2015-10-07 18:39 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:49:22 UTC


README

注解验证器是一个 ZF2 模块,用于在实体生命周期回调(事件)中对 Doctrine 实体进行验证。

在您的项目中使用注解验证器可以提高生产力。同时,参与您项目的初级开发者不需要担心验证,因为验证发生在实体中。
您还可以确信,您的持久层对代码漏洞的防护更加严密。

目前数据验证是在 flush 之前进行的,这与使用 ORM 时的观点相反,即实体在其“构建”后必须有效。

然而,这个模块为我解决了许多实际问题,我认为这是分享代码时最重要的。

安装

  1. 使用 composer
composer require ibekiaris/zf2-annotation-validator
  1. 直接在您的 ZF2 项目中

只需将模块文件复制到“模块”目录

无论如何,在包含代码后,在 application.config.php 中添加以下行

'modules' => array(
        'Application',
        'AnnotationValidator'
    ),

最后,将 "module.config.sample.php" 中的行添加到您的全局或本地项目配置文件中。当然,您需要根据需要更改 'validation_classes_aliases'。

文档

在您的实体中使用 AnnotationValidator\DoctrineValidatorTrait。

use AnnotationValidator\DoctrineValidatorTrait

/**
 * This is a simple Entity Class
 *
 *
 * @ORM\Entity
 * @ORM\Table(name="clients")
 * @ORM\HasLifecycleCallbacks
 *
 * @author     Ioannis Bekiaris <bekiarisgiannis85@gmail.com>
 * @copyright  2015 - 2016 Ioannis Bekiaris
 */
class Client
{
    use DoctrineValidatorTrait;
    
    /**
     * @ORM\Column(name="title", type="string")
     *
     * @VLD {"type":"RequiredString"}
     * @var string
     */
    private $name;
    
}

使用 @VLD 注解来验证 $name 属性。

例如:module.config.php

return [
    'validation_classes_aliases' => [
        'RequiredString' => [
            'validation_class' => '\Zend\Validator\Regex',
            'validation_options' => [
                'pattern' => '/^[\p{L}0-9\s\.\-]+$/u',
            ],
        ],
        'HostName' => [
            'validation_class' => '\Zend\Validator\Hostname',
            'validation_options' => [
                'allow' => \Zend\Validator\Hostname::ALLOW_ALL,
            ],
        ],
        'LonLat' => [
            'validation_class' => '\Zend\Validator\Regex',
            'validation_options' => [
                'pattern' => '/^[A-Z0-9\s\.]{0,10}$/',
             ],
        ],
    ],
    

注意

在验证类型(别名)中使用 "NotRequired" 作为后缀或前缀以接受 null 作为值

例如:

/**
 * @ORM\Column(name="facebook_account_url", type="string", nullable=true)
 *
 * @VLD {"type":"UriNotRequired"}
 * @var string
 */
protected $facebookAccountUrl;

许可证

此存档中的文件在许可证下发布。您可以在 LICENSE.txt 中找到此许可证的副本。