我按照此文档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>
您的brochures_directory_
值不正确:
'%kernel.root_dir%/web/uploads/brochures'
kernel.root_dir
是/app/
文件夹,因此您需要在/../
之后添加以获取项目根目录。
'%kernel.root_dir%/../web/uploads/brochures'
这就是您所遵循的指南中的样子。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句