Php 如何在Symfony 3中上载文件

Php 如何在Symfony 3中上载文件,php,file-upload,image-uploading,symfony,Php,File Upload,Image Uploading,Symfony,我随后在表单上添加了一个上传文件(见图) 如果我在表格中添加了一个文件(例如“47f1f107e3e9629a8f41a861ccf1737a.png”),我的表格就会工作。我现在的问题是无法显示此图像 Bestiaire.php: /** * @ORM\Column(type="string") * * @Assert\NotBlank(message="Please, upload the bestiaire brochure as a PDF file.") * @Assert\F

我随后在表单上添加了一个
上传文件
(见图)

如果我在表格中添加了一个文件(例如“47f1f107e3e9629a8f41a861ccf1737a.png”),我的表格就会工作。我现在的问题是无法显示此图像

Bestiaire.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(),
    ));

}
我的vews:

<li><img src="{{ asset('uploads/brochures/' ~ bestiaire.brochure) }}"/></li>

  • 您有不正确的
    手册\u目录\u
    值:

    '%kernel.root_dir%/web/uploads/brochures'
    
    kernel.root\u dir
    /app/
    文件夹,因此需要在之后添加
    /../
    才能访问项目根目录

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

    这就是您所遵循的指南中的内容。

    您有不正确的
    手册\u目录\u
    值:

    '%kernel.root_dir%/web/uploads/brochures'
    
    kernel.root\u dir
    /app/
    文件夹,因此需要在之后添加
    /../
    才能访问项目根目录

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

    这就是您所遵循的指南中的内容。

    文件系统中是否存在该文件?它有什么名称?文件系统中是否存在该文件?它叫什么名字?