【问题标题】:How to get file from form in Symfony2?如何从 Symfony2 中的表单获取文件?
【发布时间】:2015-01-27 20:15:47
【问题描述】:

我有File Field Type 的表格。我想在控制器中“捕获”上传的文件,但我不知道该怎么做。

我尝试通过$form->get('file') 访问,但在我看来这是错误的方法。为什么? var_dump( $form->get('file') ); 返回带有文件名的字符串(仅此而已)!我期待对象或类似的东西,但我只有一个文件名。

【问题讨论】:

    标签: php forms symfony symfony-2.3


    【解决方案1】:

    如果您只想从表单中获取文件,请执行此操作:

    $myFile = $request->files->get('inputFieldFileId');
    

    这应该就是你所需要的

    【讨论】:

      【解决方案2】:

      当你设置你的表单和实体时,symfony 会自动处理它。

      示例设置:

      实体(文档有文件)

      <?php
      namespace Acme\DemoBundle\Entity\Document;
      
      use Symfony\Component\HttpFoundation\File\UploadedFile;
      
      class Document
      {
          /**
           * @var UploadedFile
           */
          protected $file;
      
          /**
           * @param UploadedFile $file - Uploaded File
           */
          public function setFile($file)
          {
              $this->file = $file;
          }
      
          /**
           * @return UploadedFile
           */
          public function getFile()
          {
              return $this->file;
          }
      
          //add functions described here: http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html
      }
      

      表单类型

      <?php
      namespace Acme\DemoBundle\Entity\DocumentType;
      
      use Symfony\Component\Form\AbstractType;
      use Symfony\Component\Form\FormBuilderInterface;
      use Symfony\Component\OptionsResolver\OptionsResolverInterface;
      
      class DocumentType extends AbstractType
      {
          /**
           * @param FormBuilderInterface $builder
           * @param array $options
           */
          public function buildForm(FormBuilderInterface $builder, array $options)
          {
              $builder
                  ->add('file', 'file')
              ;
          }
      
          /**
           * @param OptionsResolverInterface $resolver
           */
          public function setDefaultOptions(OptionsResolverInterface $resolver)
          {
              $resolver->setDefaults(array(
                  'data_class' => 'Acme\DemoBundle\Entity\Document'
              ));
          }
      
          /**
           * @return string
           */
          public function getName()
          {
              return 'acme_demo_document';
          }
      
      
      }
      

      控制器 sn-p(可能是 createActionupdateAction

      $form = $this->createCreateForm($entity);
      $form->handleRequest($request);
      \Doctrine\Common\Util\Debug::dump($entity->getFile());
      

      $entity-&gt;getFile() 将保存该文件。

      看看这里:http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html 了解如何实现将文件从 /temp 移动到例如web/uploads 和其他东西。

      如果您的 IDE 没有显示您可以使用 UploadedFile 做什么,您可以在此处查找:http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/File/UploadedFile.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-17
        • 1970-01-01
        相关资源
        最近更新 更多