Upload files to a book from show book view.

This commit is contained in:
krzysiej
2022-05-31 15:25:57 +02:00
parent 623aa91872
commit 26bd59f3bb
4 changed files with 87 additions and 9 deletions

View File

@@ -5,6 +5,7 @@ namespace App\Controller;
use App\Entity\Book;
use App\Entity\File;
use App\Form\BookType;
use App\Form\FileType;
use App\Repository\BookRepository;
use App\Repository\FileRepository;
use App\Service\FileService;
@@ -83,11 +84,33 @@ class BookController extends AbstractController
return new JsonResponse($bookFinder->byUrl(base64_decode($urlInBase64)));
}
#[Route('/{id}', name: 'app_book_show', methods: ['GET'])]
public function show(Book $book): Response
#[Route('/{id}', name: 'app_book_show', methods: ['GET', 'POST'])]
public function show(Book $book, Request $request, FileRepository $fileRepository): Response
{
return $this->render('book/show.html.twig', [
$fileForm = $this->createForm(FileType::class);
$fileForm->handleRequest($request);
if ($fileForm->isSubmitted() && $fileForm->isValid()) {
/** @var \Symfony\Component\HttpFoundation\File\UploadedFile[] $ebooks */
$ebook = $request->files->get('file')['file'];
$file = new File();
$file->setFileName(trim($ebook->getClientOriginalName()));
$file->setFileSize($ebook->getSize());
$file->setExtension($ebook->guessClientExtension());
$file->setBook($book);
$fileRepository->add($file, true);
$ebook->move(
$this->getParameter('book_files'),
'ebook_' . $book->getId() . '_' .
md5($file->getFileName()) . '.' .
$file->getExtension()
);
}
return $this->renderForm('book/show.html.twig', [
'book' => $book,
'file_form' => $fileForm
]);
}
@@ -142,12 +165,15 @@ class BookController extends AbstractController
}
#[Route('/{id}', name: 'app_book_delete', methods: ['POST'])]
public function delete(Request $request, Book $book, BookRepository $bookRepository, FileService $fileService): Response
{
public function delete(
Request $request,
Book $book,
BookRepository $bookRepository,
FileService $fileService
): Response {
if ($this->isCsrfTokenValid('delete' . $book->getId(), $request->request->get('_token'))) {
$fileService->removeFiles($book->getFiles());
$bookRepository->remove($book, true);
}
return $this->redirectToRoute('app_book_index', [], Response::HTTP_SEE_OTHER);