Symfony 如何验证实体属性

Symfony 如何验证实体属性,symfony,doctrine-orm,Symfony,Doctrine Orm,我正在从CSV文件为我们的数据库(在mySql上运行)编写一个导入脚本。由于使用条令实体导入非常缓慢且占用大量内存,因此我选择编写本机查询来执行导入任务 但是,在实际导入之前,我需要验证csv文件中的值,我想知道是否有任何方法可以使用实体属性定义(已在orm xml文件中定义)来进行验证。例如,如果该字段已定义为长度最大为255个字符的字符串,那么我可以了解如何获取该定义并在csv文件中验证该值 我希望这是有意义的,如果我的问题在任何部分都不清楚,请告诉我。您可以在导入数据之前使用Symfony

我正在从CSV文件为我们的数据库(在mySql上运行)编写一个导入脚本。由于使用条令实体导入非常缓慢且占用大量内存,因此我选择编写本机查询来执行导入任务

但是,在实际导入之前,我需要验证csv文件中的值,我想知道是否有任何方法可以使用实体属性定义(已在orm xml文件中定义)来进行验证。例如,如果该字段已定义为长度最大为255个字符的字符串,那么我可以了解如何获取该定义并在csv文件中验证该值


我希望这是有意义的,如果我的问题在任何部分都不清楚,请告诉我。

您可以在导入数据之前使用Symfony2验证程序服务检查数据。但是,您必须添加max-length约束作为断言

示例实体:

<?php

// src/Acme/YourBundle/Entity/Author.php
// ...

use Symfony\Component\Validator\Constraints as Assert;

class YourEntity
{
    /**
     * @Assert\Length(max=255)
     */
    public $someString;
}

<?php
// ...
use Acme\YourBundle\Entity\YourEntity;

public function indexAction()
{
    //omitted: get your csv data first

    // create a new instance of your entity
    $entity = new YourEntity();
    // populate your entity with data from your csv file
    $entity->setSomeString($stringFromCsvFile);

    // get the validator and validate your entity
    $validator = $this->get('validator');
    $errors = $validator->validate($entity);

    if (count($errors) > 0) {
        // there are errors! do something with them
    } else {
        // there are no errors, persist the entity
        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();
    }
}