2012-05-10 45 views
0

我想構建一個表單來存儲一些數據。 「Tarea」可能有許多「材料」和「材料」庫爾屬於一個或多個「Tarea」。 「材質」實體具有圖片屬性,並帶有圖片上傳。ManyToMany表單驗證錯誤

我可以創建一個新的「材料」與圖片沒有問題。當我嘗試創建新的「Tarea」時,問題就變成了,當我提交表單時,我收到「無法找到文件」錯誤。

這是我的物質實體與文件上傳功能:

/** 
* Gitek\HotelBundle\Entity\Material 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Gitek\HotelBundle\Entity\MaterialRepository") 
*/ 
class Material 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string $nombre 
    * 
    * @ORM\Column(name="nombre", type="string", length=100) 
    */ 
    private $nombre; 

    /** 
    * @ORM\Column(type="string", nullable="true") 
    * 
    * @Assert\Image(maxSize = "500k") 
    */ 
    protected $imagen; 

    /** 
    * @var datetime $created_at 
    * 
    * @ORM\Column(name="created_at", type="datetime") 
    */ 
    private $created_at; 

    /** 
    * @var datetime $updated_at 
    * 
    * @ORM\Column(name="updated_at", type="datetime") 
    */ 
    private $updated_at; 

    /** 
    * @ORM\ManyToMany(targetEntity="Tarea", mappedBy="materiales") 
    */ 
    protected $tareas; 

    public function __construct() 
    { 
     $this->created_at = new \DateTime(); 
     $this->updated_at = new \DateTime(); 
    } 

    public function __toString() 
    { 
     return $this->getNombre(); 
    } 

    /** 
    * Sube la foto de la incidencia copiándola en el directorio que se indica y 
    * guardando en la entidad la ruta hasta la foto 
    * 
    * @param string $directorioDestino Ruta completa del directorio al que se sube la foto 
    */ 
    public function subirImagen($directorioDestino) 
    { 
     if (null === $this->imagen) { 
      return; 
     } 

     $nombreArchivoImagen = uniqid('material-').'-1.'.$this->imagen->guessExtension(); 

     $this->imagen->move($directorioDestino, $nombreArchivoImagen); 

     $this->setImagen($nombreArchivoImagen); 
    } 

這是我利亞實體:

/** 
* Gitek\HotelBundle\Entity\Tarea 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Gitek\HotelBundle\Entity\TareaRepository") 
*/ 
class Tarea 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string $nombre 
    * 
    * @ORM\Column(name="nombre", type="string", length=100) 
    */ 
    private $nombre; 

    /** 
    * @var datetime $created_at 
    * 
    * @ORM\Column(name="created_at", type="datetime") 
    */ 
    private $created_at; 

    /** 
    * @var datetime $updated_at 
    * 
    * @ORM\Column(name="updated_at", type="datetime") 
    */ 
    private $updated_at; 

    /** @ORM\ManyToOne(targetEntity="Gitek\HotelBundle\Entity\Tipotarea") */ 
    protected $tipotarea; 

    /** 
    * @ORM\ManyToMany(targetEntity="Material", inversedBy="tareas") 
    * @ORM\JoinTable(name="material_tarea", 
    *  joinColumns={@ORM\JoinColumn(name="tarea_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="material_id", referencedColumnName="id")} 
    *) 
    */ 
    protected $materiales; 

這我MaterialType表單類型:

<?php 

namespace Gitek\BackendBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilder; 

class MaterialType extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder 
      ->add('nombre') 
      ->add('imagen') 
     ; 
    } 

    public function getName() 
    { 
     return 'gitek_hotelbundle_materialtype'; 
    } 
} 

由於我說,當我上傳de form時,我得到「The file could not be found」錯誤。這似乎是驗證失敗。

任何幫助或線索?

更新:如果在我的TareaController我評論驗證線它正常工作。任何線索?

回答

0

該表格不包含Tarea的字段,因此如果在驗證中您要求,它會失敗。如果您一直不需要它,您將需要設置驗證組,以便驗證器知道何時驗證什麼。