diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php index 7d31df1..2fbe9e9 100644 --- a/src/Controller/HomeController.php +++ b/src/Controller/HomeController.php @@ -28,7 +28,7 @@ class HomeController extends AbstractController return $this->render('home.html.twig', [ 'content' => $fileSystemService->getDirs($dirs), - 'fileForm' => $this->createForm(UploadFileForm::class), + 'fileForm' => $this->createForm(UploadFileForm::class, data: ['dirs' => $dirs]), ]); } } \ No newline at end of file diff --git a/src/Controller/UploadController.php b/src/Controller/UploadController.php index 3e8585d..8b0038c 100644 --- a/src/Controller/UploadController.php +++ b/src/Controller/UploadController.php @@ -13,17 +13,24 @@ use Symfony\Component\Routing\Attribute\Route; class UploadController extends AbstractController { - #[Route(path: '/upload', name: 'app_upload', methods: Request::METHOD_POST)] + #[Route( + path: '/upload/{dirs?}', + name: 'app_upload', + requirements: ['dirs' => '.+'], + defaults: ['dirs' => ''], + methods: Request::METHOD_POST, + )] public function __invoke( FileSystemService $fileSystemService, Request $request, + string $dirs, ): Response { - $fileData = new UploadedFileData(); - $form = $this->createForm(UploadFileForm::class, $fileData)->handleRequest($request); + $fileData = new UploadedFileData(dir: $dirs); + $form = $this->createForm(UploadFileForm::class, $fileData)->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $fileSystemService->uploadFile($fileData->files); + $fileSystemService->uploadFile($fileData); } return $this->redirectToRoute('app_home'); diff --git a/src/Forms/UploadFileForm.php b/src/Forms/UploadFileForm.php index 0d0fe5e..6c54022 100644 --- a/src/Forms/UploadFileForm.php +++ b/src/Forms/UploadFileForm.php @@ -16,7 +16,7 @@ class UploadFileForm extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->setAction($this->urlGenerator->generate('app_upload')) + ->setAction($this->urlGenerator->generate('app_upload', ['dirs' => $options['data']['dirs']])) ->add('files', FileType::class, [ 'attr' => ['class' => 'hidden'], 'multiple' => true, diff --git a/src/Objects/UploadedFileData.php b/src/Objects/UploadedFileData.php index fc3230e..7da5db6 100644 --- a/src/Objects/UploadedFileData.php +++ b/src/Objects/UploadedFileData.php @@ -6,8 +6,13 @@ use Symfony\Component\HttpFoundation\File\UploadedFile; class UploadedFileData { - /** - * @var UploadedFile[] $files - */ - public array $files; + public function __construct( + /** + * @var UploadedFile[] $files + */ + public array $files = [], + + public string $dir = '', + ) { + } } \ No newline at end of file diff --git a/src/Service/FileSystemService.php b/src/Service/FileSystemService.php index d7a194a..68820e7 100644 --- a/src/Service/FileSystemService.php +++ b/src/Service/FileSystemService.php @@ -3,18 +3,20 @@ namespace App\Service; use App\Objects\DirContent; +use App\Objects\UploadedFileData; use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\Filesystem\Exception\IOException; use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\Finder\Finder; use Symfony\Component\HttpFoundation\File\UploadedFile; +use Symfony\Component\HttpFoundation\RequestStack; class FileSystemService { public function __construct( #[Autowire(env: 'DATA_DIR')] private readonly string $dir, - private readonly Filesystem $filesystem, + private readonly Filesystem $filesystem, ) { } @@ -35,13 +37,11 @@ class FileSystemService return $contents; } - /** - * @param UploadedFile[] $files - */ - public function uploadFile(array $files): void + public function uploadFile(UploadedFileData $files): void { - foreach ($files as $file) { - $this->filesystem->dumpFile($this->getTotalPath($file->getClientOriginalName()), $file->getContent()); + dd($files); + foreach ($files->files as $file) { + $this->filesystem->dumpFile($files->dir . $this->getTotalPath($file->getClientOriginalName()), $file->getContent()); } }