0

自上周以来,我一直在尝试解决这个奇怪的问题,但我仍然没有找到任何解决方案,所以我决定在这里提问。

为了更好地理解,我将简要介绍我的模型:

我有一个名为 Ruta 的实体,它有一组图像。Ruta 中的每个图像都称为 ImagenRuta,它具有一些属性,包括拥有 ImagenRuta 的实体 Ruta。(一对多关系)

你可以在这里看到我的实体 Ruta:https ://gist.github.com/b0ae0daaeebe4b6323d0

我的实体 ImagenRuta 在这里: https ://gist.github.com/9064fb2b5f4138423471

我的问题是,我无法从控制器更新任何 Ruta,而不会丢失有关 Ruta 拥有的 ImagenRuta 集合中的项目的信息。特别是 ImagenRuta 的属性“imagen”设置为空。其他属性(如 ImagenRuta 的 id 或 Ruta 的 id)不会丢失。

我认为问题可能与 ImagenRuta 形式的“imagen”类型文件有关。因为如果我将该字段设置为文本,实体 ImagenRuta 的属性“imagen”不会丢失在我要更新的 Ruta 具有的集合的任何 ImagenRuta 中。

这是我的 ImagenRuta 的表格:https ://gist.github.com/0409c630b8c9b3b08068

和我的 Ruta 表格: http: //gist.github.com/74db6231a2b238995fff

这是我为注意文本字段问题而编写的代码:

class ImagenRutaType extends AbstractType {        
    public function buildForm(FormBuilderInterface $builder, array $options) {          
        $builder->add('imagen', 'text', array('required' => true));    
    }        
}

我使用下面的句子来恢复实体 Ruta 中的原始 ImagenRuta 集合,然后通过执行使用表单信息修改该实体$form->bindRequest($request)

$anterior = $editForm->getData(); // get ruta entity in form    
$originalImages = $anterior->getImagenes(); // get ImagenRuta collection

然后我将 $originalImages 与 $editForm 包含的 ImagenRuta 集合合并

$entity = $em->getRepository('RutasBundle:Ruta')->find($id);    
$editForm = $this->createForm(new RutaType(), $entity);    
$editForm->bind($request);    
$imagenesNuevas = $entity->getImagenes()    
// Merge $imagenesNuevas with $originalImages to not to lose any image

问题是我无法恢复 Ruta 之前的 ImagenRuta 集合,因为当我执行时:

$originalImages  = $ anterior-> getImagenes()

$originalImages我有这个集合,是的,但是那个集合中的所有 ImagenRuta 都将“imagen”字段设置为 null(其他没有),我不知道为什么。正如我上面所说,我认为它可能与 ImagenRuta 表单中的“imagen”字段是“文件”类型有关,因为当这种情况发生时,我没有从表单修改的每个 imagenRuta 都会通过“imagen”字段集到达控制器为空。

请参阅我的控制器中的 updateAction 以获取更多详细信息:https ://gist.github.com/46e6d0d2f9e188f44030

我已经阅读了很多教程、博客、论坛和官方食谱文档,但我没有找到任何解决方案。我希望有人能帮助我。

问候。

4

1 回答 1

0

您的问题是您使用实体的单个属性来保存保存到数据库的图像的值和在表单中上传的文件对象。您应该有两个不同的属性,一个持久化到数据库并保存您的图像文件名或路径,另一个不持久化的属性将用于您的表单文件字段。请参阅此食谱条目以获取更多信息:

http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html

于 2012-09-29T16:46:43.557 回答