Added twig extension to format file size, links to download and delete files attached to the book.
This commit is contained in:
@@ -99,9 +99,9 @@ class BookController extends AbstractController
|
||||
|
||||
$ebook->move(
|
||||
$this->getParameter('book_files'),
|
||||
'ebook_' . $book->getId() . '_' . md5(
|
||||
$ebook->getClientOriginalName()
|
||||
) . '.' . $ebook->guessClientExtension()
|
||||
'ebook_' . $book->getId() . '_' .
|
||||
md5($file->getFileName()) . '.' .
|
||||
$file->getExtension()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -126,16 +126,4 @@ class BookController extends AbstractController
|
||||
|
||||
return $this->redirectToRoute('app_book_index', [], Response::HTTP_SEE_OTHER);
|
||||
}
|
||||
|
||||
#[Route('/download/{id}', name: 'app_book_download', methods: ['GET'])]
|
||||
public function downloadBook(Book $book): BinaryFileResponse
|
||||
{
|
||||
return $this->file(
|
||||
$this->getParameter('book_files') . '/' . 'ebook_' . $book->getId() . '.' . pathinfo(
|
||||
$book->getOriginalFilename(),
|
||||
PATHINFO_EXTENSION
|
||||
),
|
||||
$book->getOriginalFilename()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
53
src/Controller/FileController.php
Normal file
53
src/Controller/FileController.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Entity\Book;
|
||||
use App\Entity\File;
|
||||
use App\Repository\FileRepository;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
class FileController extends AbstractController
|
||||
{
|
||||
#[Route('/file', name: 'app_file')]
|
||||
public function index(): Response
|
||||
{
|
||||
return $this->render('file/index.html.twig', [
|
||||
'controller_name' => 'FileController',
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/file/delete/{id}', name: 'app_file_delete')]
|
||||
public function delete(
|
||||
Request $request,
|
||||
FileRepository $fileRepository,
|
||||
File $file,
|
||||
Filesystem $filesystem
|
||||
): Response {
|
||||
$filePath = $this->getParameter('book_files') . '/' . 'ebook_' . $file->getBook()->getId() . '_' .
|
||||
md5($file->getFileName()) . '.' .
|
||||
$file->getExtension();
|
||||
$filesystem->remove($filePath);
|
||||
|
||||
if (!$filesystem->exists($filePath)) {
|
||||
$fileRepository->remove($file, 'true');
|
||||
}
|
||||
return $this->redirect($request->headers->get('referer'));
|
||||
}
|
||||
|
||||
#[Route('/file/{id}', name: 'app_file_download', methods: ['GET'])]
|
||||
public function get(File $file)
|
||||
{
|
||||
return $this->file(
|
||||
$filePath = $this->getParameter('book_files') . '/' . 'ebook_' . $file->getBook()->getId() . '_' .
|
||||
md5($file->getFileName()) . '.' .
|
||||
$file->getExtension(),
|
||||
$file->getFileName()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
namespace App\Twig;
|
||||
|
||||
use Twig\Extension\AbstractExtension;
|
||||
use Twig\TwigFilter;
|
||||
use Twig\TwigFunction;
|
||||
|
||||
class AppExtension extends AbstractExtension
|
||||
@@ -15,8 +16,22 @@ class AppExtension extends AbstractExtension
|
||||
];
|
||||
}
|
||||
|
||||
public function getFilters()
|
||||
{
|
||||
return [
|
||||
new TwigFilter('bytes_format', [$this, 'bytes_format']),
|
||||
];
|
||||
}
|
||||
|
||||
public function file_exists(string $file): bool
|
||||
{
|
||||
return file_exists(ltrim($file, '/'));
|
||||
}
|
||||
|
||||
public function bytes_format(int $bytes): string
|
||||
{
|
||||
$base = log($bytes) / log(1024);
|
||||
$suffix = array("B", "KB", "MB", "GB", "TB")[floor($base)];
|
||||
return round(pow(1024, $base - floor($base)), 2) . $suffix;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user