Skip to content

Instantly share code, notes, and snippets.

@taiebb
Created May 3, 2020 17:33
Show Gist options
  • Save taiebb/820b6d1c3a0095f0f31a2d7f04410e23 to your computer and use it in GitHub Desktop.
Save taiebb/820b6d1c3a0095f0f31a2d7f04410e23 to your computer and use it in GitHub Desktop.
Symfony form + DropZonejs
<?php
namespace App\Controller\Admin;
use App\Entity\Media;
use App\Form\MediaType;
use App\Repository\MediaRepository;
use App\Service\FileUploader;
use phpDocumentor\Reflection\Types\This;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("admin/media")
*/
class MediaController extends AbstractController
{
private $session;
public function __construct(SessionInterface $session)
{
$this->session = $session;
//$this->session->remove('image-file-name');
dump($session->all());
}
/**
* @Route("/", name="admin_media_index", methods={"GET"})
* @param MediaRepository $mediaRepository
* @return Response
*/
public function index(MediaRepository $mediaRepository): Response
{
return $this->render('admin/media/index.html.twig', [
'media' => $mediaRepository->findAll(),
]);
}
/**
* @Route("/new/upload", name="admin_media_upload_image", methods={"POST"})
* @param Request $request
* @param FileUploader $fileUploader
* @return Response
*/
public function uploadImage(Request $request, FileUploader $fileUploader): Response
{
/** @var UploadedFile $uploadedFile **/
$uploadedFile = $request->files->get('media')['fileName'];
$imageFileName = '';
if ($uploadedFile) {
$imageFileName = $fileUploader->upload($uploadedFile);
$this->session->set('file_name', $imageFileName);
}
$response = new Response();
$response->setContent(json_encode([
'message' => 'success',
'fileName' => $imageFileName,
'session_id' => $this->session->getId(),
'Session' => $this->session->all(),
]));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/new", name="admin_media_new", methods={"GET","POST"})
* @param Request $request
* @return Response
*/
public function new(Request $request): Response
{
if ($request->getMethod() === 'GET') {
$this->session->remove('file_name');
}
$medium = new Media();
$form = $this->createForm(MediaType::class, $medium);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($medium);
$entityManager->flush();
//$this->session->remove('file_name');
return $this->redirectToRoute('admin_media_index');
}
return $this->render('admin/media/new.html.twig', [
'medium' => $medium,
'form' => $form->createView(),
]);
}
/**
* @Route("/{id}/edit", name="admin_media_edit", methods={"GET","POST"})
* @param Request $request
* @param Media $medium
* @return Response
*/
public function edit(Request $request, Media $medium): Response
{
$form = $this->createForm(MediaType::class, $medium);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('admin_media_index');
}
return $this->render('admin/media/edit.html.twig', [
'medium' => $medium,
'form' => $form->createView(),
]);
}
/**
* @Route("/{id}", name="admin_media_delete", methods={"DELETE"})
* @param Request $request
* @param Media $medium
* @return Response
*/
public function delete(Request $request, Media $medium): Response
{
if ($this->isCsrfTokenValid('delete'.$medium->getId(), $request->request->get('_token'))) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($medium);
$entityManager->flush();
}
return $this->redirectToRoute('admin_media_index');
}
}
<?php
namespace App\Form;
use App\Entity\Media;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Image;
use Symfony\Component\Form\FormEvent;
class MediaType extends AbstractType
{
private $session;
public function __construct(SessionInterface $session)
{
$this->session = $session;
//$this->session->remove('file_name');
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('fileName')
->add('alt')
->add('title')
->add('submit', SubmitType::class);
$builder->addEventListener(
FormEvents::POST_SET_DATA,
function (FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
/*if ($this->session->has('file_name')) {
//$data['fileName'] = $this->session->get('file_name');
$data->setFileName($this->session->get('file_name'));
}*/
$form->get('fileName')->setData($this->session->get('file_name'));
//$data->setFileName($this->session->get('file_name'));
dump($event);
dump($this->session->get('file_name'));
dump($form->get('fileName')->getData());
}
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Media::class,
]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment