我尝试以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中并将其路径存储在数据库中
答案 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...