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

标签 php validation symfony doctrine-orm

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

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

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

最佳答案

您可以通过以下方式初始化验证器:

$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"
);

关于php - 如何在遗留 PHP 项目中使用 symfony2 验证器组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521121/

相关文章:

validation - MVC3 客户端验证不起作用

php - Symfony 2,ServiceNotFoundException,不存在的服务 "templating.engine.php"

php - 使用 php 将 'Watermark' 添加到图像

ASP.NET AJAX 验证控件

php - 根据括号递归地按逗号展开

c# - 使用 MVVM 进行正确验证

php - 如何重新生成 crud -- Doctrine :generate:crud after editing the entity

php - 如何替换 Symfony 中未找到的图像

php - 如何以 iCalendar 格式保存来自 Fullcalendar 的 JSON 事件数据

php - 使用 javascript 访问 php 文件中的 session 变量?