0
私はこのフォームにUpload File
を追加するためにこのdocに従っています(画像参照)。Symfony 3のファイルをアップロードするには
私のフォームが動作し、私のデータベースにファイルを追加すると(私は、例えば '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(),
));
}
Config.yml:
parameters:
locale: fr
brochures_directory: '%kernel.root_dir%/web/uploads/brochures'
マイvews:
<li><img src="{{ asset('uploads/brochures/' ~ bestiaire.brochure) }}"/></li>
ファイルがファイルシステムに存在しますか?そしてそれはどのような名前ですか? –