我有一个遗留项目,它不是symfony2项目,但有可用的symfony2组件。
我有Doctrine实体,我希望能够通过注释来断言它们。我没有容器,不能只是打电话:
$container->get('validator')->validate($entity);
答案 0 :(得分:1)
您可以通过以下方式初始化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"
);