如何在遗留PHP项目中使用symfony2验证器组件


How to use the symfony2 validator component in a legacy PHP project?

我有一个遗留项目,它不是symfony2项目,但有symfony2组件可用。

我有Doctrine实体,我希望能够通过注释断言它们。我没有容器,不能直接调用:

$container->get('validator')->validate($entity);

您可以通过以下方式初始化Validator:

$validator = Validation::createValidatorBuilder()
                    ->enableAnnotationMapping()
                    ->getValidator()

通过

验证实体
$violations = $validator->validate($entity);

如果$violations是空数组,则实体已验证,否则您将得到违规,并且可以:

if (count($violations) > 0)
    foreach($violations as $violation) {
         $this->getLogger()->warning($violation->getMessage());
    }
}

您断言您的实体并确保使用了所有注释。例如,我使用的遗留项目不包括@Entity注释,虽然它没有打扰Doctrine,但它确实打扰了验证过程。

<?php
namespace Hive'Model'YourEntity;
use Doctrine'ORM'Mapping'Column;
use Doctrine'ORM'Mapping'Entity;
use Doctrine'ORM'Mapping'Id;
use Doctrine'ORM'Mapping'ManyToOne;
use Doctrine'ORM'Mapping'Table;
use Symfony'Component'Validator'Constraints'NotNull;
/**
 * Class AdGroupAd
 * @Entity(repositoryClass="YourEntityRepository")
 * @Table(name="your_entity_table_name")
 */
class AdGroupAd
{
     ...
    /**
     * @Column(type="string")
     * @var string
     * @NotNull()
     */
    protected $status;
    ...

最后,您必须下载注释。Doctrine不会使用默认的自动装弹器,你必须特别使用Doctrine'Common'Annotations'AnnotationRegistry

你可以通过:

AnnotationRegistry::registerAutoloadNamespace(
    "Symfony",
    PATH_TO_YOUR_WEB_ROOT . "/vendor/symfony/symfony/src"
);