在Symfony上传PDF文件

时间:2017-03-23 23:37:51

标签: php symfony

我尝试以symfony形式上传文件,但是我收到此错误:注意:未定义的索引:文件意味着它没有恢复文件。

我的表格:

<?php
namespace Polytech\SkillsBundle\Form\Rapport;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;

class FicheOccasionType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('ues', EntityType::class,
                array(
                    'class' => 'Polytech\SkillsBundle\Entity\UE',
                    'attr' => array('class' => 'browser-default ue'),
                    'choice_label' => 'nom',
                    'label' => false,
                    'required' => false,
                    'placeholder' => 'Choisissez une UE'
                )
            )
            ->add('etudiants', EntityType::class,
                array(
                    'class' => 'Polytech\SkillsBundle\Entity\Utilisateur',
                    'attr' => array('class' => 'browser-default etudiants'),
                    'choice_label' => 'nom',
                    'label' => false,
                    'required' => false,
                    'placeholder' => 'Choisissez un utilisateur'
                )
            )
            ->add('file', FileType::class, array('label' => 'PDF File'))
            ->add('submit', HiddenType::class)
            ->add('export', ButtonType::class, array('label' => 'Exporter'))
            ->add('import', ButtonType::class, array('label' => 'Import'));

    }

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

这是我的控制器(重要部分):

 if($form->isSubmitted() && $form->isValid() ) {
        $data = $request->request->get('fiche_occasion');
        $use = $data['ues'];
        $etudiants = $data['etudiants'];
        $file = $data['file'];
        $filename = md5(uniqid()).'.'.$file->guessExtension();
        $action = $data['submit'];

如何检索文件信息以便将其存储在Web中并将其路径存储在数据库中

2 个答案:

答案 0 :(得分:1)

文件不存储在post或get vars中。文件存储在$ request-&gt;文件中。

symfony.com/doc/current/components/http_foundation.html#accessing-request-data

尝试使用$ file = $ request-&gt;文件[&#39; file&#39;];代替。

答案 1 :(得分:0)

尝试关注此链接:

http://symfony.com/doc/current/controller/upload_file.html

包含使用上传文件创建表单的良好做法(也是安全性)。

在您的情况下,尝试使用$ficheOccasion (您的对象......)

$ficheOccasion = new FicheOccasion(); // Your Entity Class (?)
$form = $this->createForm(FicheOccasionType::class, $ficheOccasion);

和Symfony在控制器中的这一行之后完成工作:

$form->handleRequest($request);

之后:

if($form->isSubmitted() && $form->isValid() ) {
....

你可能有权访问文件内容:

$file = $ficheOccasion->getFile();

所以你可以这样做:

$file->guessExtension();
$file->move( .... )

并在将对象持久化到数据库之前结束:

$ficheOccasion->setFile($fileName); // your prepared filename...