我正在从 CSV 文件为我们的数据库(在 mySql 上运行)编写一个导入脚本。由于使用理论实体导入非常缓慢且占用大量内存,因此我选择编写本机查询来执行导入任务。
但是,在实际导入之前,我需要验证 csv 文件中的值,我想知道是否有任何方法可以利用实体属性定义(已经在 orm xml 文件中定义)来进行验证。例如,如果该字段已定义为长度最大为 255 个字符的字符串,那么我可以了解如何获取该定义并验证 csv 文件中的值。
我希望这是有道理的,如果我的问题在任何部分不清楚,请告诉我。
我正在从 CSV 文件为我们的数据库(在 mySql 上运行)编写一个导入脚本。由于使用理论实体导入非常缓慢且占用大量内存,因此我选择编写本机查询来执行导入任务。
但是,在实际导入之前,我需要验证 csv 文件中的值,我想知道是否有任何方法可以利用实体属性定义(已经在 orm xml 文件中定义)来进行验证。例如,如果该字段已定义为长度最大为 255 个字符的字符串,那么我可以了解如何获取该定义并验证 csv 文件中的值。
我希望这是有道理的,如果我的问题在任何部分不清楚,请告诉我。
您可以在导入数据之前使用 Symfony2 验证器服务来检查数据。但是,您必须将最大长度约束添加为断言。
示例实体:
<?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();
}
}
有关详细信息,请参阅http://symfony.com/doc/current/book/validation.html。