2014-10-30 106 views
0

我目前正在開發一個symfony2表單,它允許用戶在創建文章時添加圖片。我創建了一個看起來像這樣的形式:表單不允許上傳

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('name') 
     ->add('price') 
     ->add('size') 
     ->add('description') 
     ->add('pictures', 'collection', array(
     'type' => new PictureType(), 
     'allow_add' => true, 
     'by_reference' => false, 
     'allow_delete' => true, 
     'prototype' => true 

    )); 
} 

的是,當我用這一個,我的表單不允許上傳任何圖片(我可以添加名稱,價格,尺寸,描述,但「加文件」按鈕是無處可尋).Picture實體看起來是這樣的:

class Picture 
{ 
/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @Assert\File(maxSize="6000000") 
*/ 
public $file; 

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

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

/** 
* @ORM\ManyToOne(targetEntity="Article", inversedBy="pictures") 
* @ORM\JoinColumn(name="property_id", referencedColumnName="id") 
*/ 
protected $article; 

形式顯示如下:

  <form method="post" {{ form_enctype(form) }}> 

       <br/> 
       <h1>NEW ARTICLE</h1> 
       {{ form_widget(form) }} 
       <input type="submit" class="btn btn-primary send_message" /> 
      </form> 

,這是PictureType

class PictureType extends AbstractType 
{ 
/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('name','text',array(
     "label" => "Name", 
     "required" => TRUE, 
    )); 
    $builder->add('description','textarea',array(
     "label" => "Description", 
     "required" => FALSE, 
    )); 
    $builder->add('files','file',array(
     "label" => "Fichiers", 
     "required" => FALSE, 
     "attr" => array(
      "accept" => "image/*", 
      "multiple" => "multiple", 
     ) 
    )); 
} 

/** 
* @param OptionsResolverInterface $resolver 
*/ 
public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Dyma\DesignerBundle\Entity\Picture' 
    )); 
} 

/** 
* @return string 
*/ 
public function getName() 
{ 
    return 'dyma_designerbundle_picture'; 
} 
} 

這是我第一次在表單中使用集合,所以我甚至不知道它應該是什麼樣子,但我很確定我的代碼有什麼問題。任何想法爲什麼我不能添加這些圖片?

+0

我們顯示在視圖中 – Dai 2014-10-30 14:23:38

+0

表單<形式方法= 「POST」{{form_enctype(形式)}}> \t
\t

NEW ARTICLE

\t \t {{form_widget(form)}} \t \t 難以讓它更容易:) – 2014-10-30 14:27:50

+0

我想@Dai想看到顯示的form_enctype。如果它不是多部分,它將根本無法上傳文件。 – Chilion 2014-10-30 14:49:02

回答

0

您應該(如註釋中所述)在表單中添加一個enctype="multipart/form-data"

除此之外,

<input type="file" name="file" /> 
+0

做到了。該enctype沒有改變的東西,和輸入,顯然,增加了一個輸入字段上傳,但它沒有任何關係的形式,並選定的文件不上傳 – 2014-11-04 12:40:21

+0

我假設你知道你應該保存該文件自己呢?用戶將其張貼到表單中,並且您正在完成剩餘的工作。你懂的...? – Chilion 2014-11-04 13:39:11

+0

是的,我願意。起初,我試圖用一個文件來做到這一點,它工作得很好(不需要添加文件輸入,仍然可以通過表單自動生成按鈕)。然後,我嘗試將其更改爲允許同時進行多次上傳,因此我將該文件更改爲一組文件。雖然,通過你的回答告訴我,我認爲這是不可能的,所以我會努力做到這一點... – 2014-11-04 14:15:15