2012-05-10 8 views
0

いくつかのデータを格納するフォームを作成したいと思います。 「Tarea」には1つ以上の「Tarea」に属する「Material」と「Material」クールが多数存在する可能性があります。 「マテリアル」エンティティには画像アップロードがある画像プロパティがあります。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); 
    } 

これは私のTareaエンティティである:

/** 
* 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'; 
    } 
} 

として、私はフォームをアップロードすると、「ファイルが見つかりませんでした」というエラーが表示されました。検証が失敗するようです。

助けや手掛かりはありますか?

更新:私のTareaControllerで、私が正しく動作する検証ラインにコメントする場合。どんな手掛かり?

答えて

0

フォームにはTareaのフィールドが含まれていないので、検証に必要な場合は失敗します。常に必要としない場合は、バリデーショングループを設定して、バリデータがいつ検証するかを知るようにします。