2014-10-30 162 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