如何在Symfony 3中上传文件

摩根·米勒

我按照此文档Upload File在表单上添加了一个(参见图片)。

我的表单有效,并且如果我在数据库中添加文件(例如,我有“ 47f1f107e3e9629a8f41a861ccf1737a.png”)。我现在的问题是我无法显示该图像。

Bestiary.php:

/**
 * @ORM\Column(type="string")
 *
 * @Assert\NotBlank(message="Please, upload the bestiaire brochure as a PDF file.")
 * @Assert\File(mimeTypes={ "image/png" })
 */
private $brochure;

public function getBrochure()
{
    return $this->brochure;
}

public function setBrochure($brochure)
{
    $this->brochure = $brochure;

    return $this;
}

BestiaireType.php

    <?php

    namespace Tolkien\BestiaireBundle\Form;

    use Symfony\Bridge\Doctrine\Form\Type\EntityType;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
    use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
    use Symfony\Component\Form\Extension\Core\Type\SubmitType;
    use Symfony\Component\Form\Extension\Core\Type\TextareaType;
    use Symfony\Component\Form\Extension\Core\Type\TextType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\Form\FormEvent;
    use Symfony\Component\Form\FormEvents;
    use Symfony\Component\OptionsResolver\OptionsResolver;
    use Symfony\Component\Form\Extension\Core\Type\FileType;


    class BestiaireType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('date',                   DateTimeType::class)
                ->add('name',                   TextType::class)
                //etc..
                ->add('brochure',               FileType::class, array('label' => 'Brochure (PDF file)'))
                ->add('save',                   SubmitType::class);


            $builder->addEventListener(
                FormEvents::PRE_SET_DATA,  
                function(FormEvent $event) {
                    $bestiaire = $event->getData();

                    if (null === $bestiaire) {
                        return;
                    }
                }
            );
        }
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Tolkien\BestiaireBundle\Entity\Bestiaire'
            ));
        }
    }
In my form : 

    {{ form_row(form.brochure) }}

My controller :
/**
 * @Security("has_role('ROLE_AUTEUR') or has_role('ROLE_USER') or has_role('ROLE_ADMIN') ")
 */
public function addAction(Request $request)
{
    $bestiaire = new Bestiaire();
    $form = $this->get('form.factory')->create(BestiaireType::class, $bestiaire);



    if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
        /** @var Symfony\Component\HttpFoundation\File\UploadedFile $file */
        $file = $bestiaire->getBrochure();

        $fileName = md5(uniqid()) . '.' . $file->guessExtension();

        $file->move(
            $this->getParameter('brochures_directory'),
            $fileName
        );

        $bestiaire->setBrochure($fileName);

        $em = $this->getDoctrine()->getManager();
        $em->persist($bestiaire);
        $em->flush();

        $request->getSession()->getFlashBag()->add('notice', 'Annonce bien enregistrée.');

        return $this->redirectToRoute('tolkien_bestiaire_view', array('id' => $bestiaire->getId()));
    }
    return $this->render('TolkienBestiaireBundle:bestiaire:add.html.twig', array(
        'form' => $form->createView(),
    ));

}

Config.yml:

parameters:
    locale: fr
    brochures_directory: '%kernel.root_dir%/web/uploads/brochures'

我的誓言:

<li><img src="{{ asset('uploads/brochures/' ~ bestiaire.brochure) }}"/></li>
雅库布·马特恰克(Jakub Matczak)

您的brochures_directory_不正确

'%kernel.root_dir%/web/uploads/brochures'

kernel.root_dir/app/文件夹,因此您需要在/../之后添加以获取项目根目录。

'%kernel.root_dir%/../web/uploads/brochures'

这就是您所遵循的指南中的样子。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Symfony2中上传文件

来自分类Dev

在Symfony2中上传文件

来自分类Dev

在Symfony中上传文件

来自分类Dev

如何在swift 3中在谷歌驱动器中上传CSV文件

来自分类Dev

如何在vNext下的MVC 6中上传文件?

来自分类Dev

如何在Angular2中上传文件

来自分类Dev

如何从Angular 8在AWS S3中上传文件

来自分类Dev

使用Sonata-project在Symfony 2中上传文件

来自分类Dev

如何在Codeigniter框架中上传文件

来自分类Dev

如何在Android中上传多个文件

来自分类Dev

如何在kaltura中上传字幕文件?

来自分类Dev

如何在PHP中上传文件

来自分类Dev

如何在Postman中上传文件?

来自分类Dev

如何在uploadcare中上传多个文件?

来自分类Dev

如何在Wordpress中上传.jar文件?

来自分类Dev

如何在IIS中上传文件?

来自分类Dev

如何在Android中上传多个文件

来自分类Dev

如何在相对目录中上传文件

来自分类Dev

如何在Codeigniter中上传多个文件?

来自分类Dev

如何在Codeigniter中上传.ini文件?

来自分类Dev

如何在硒中上传多个文件?

来自分类Dev

如何使在struts2中上传文件成为可选?

来自分类Dev

如何在python中上传文件时读取内存中zip文件的内容?

来自分类Dev

如何在KeystoneJS中上传S3文件

来自分类Dev

如何在gsutil中创建存储分区,以便在cloudsql中上传sql转储文件?

来自分类Dev

如何在Laravel 5中上传大于5MB的大文件

来自分类Dev

如何在Alamofire中的参数中上传文件并传递数据-Swift 5

来自分类Dev

如何在Django 3.0.4中上传文件时出现进度条

来自分类Dev

如何在下面的脚本中更改php中上传文件的名称