W tym rozdziale pokażę w jaki sposób uploadować w Symfony wiele plików na serwer. Możesz to rozwiązanie wykorzystać do tworzenia galerii zdjęć itp.

Najpierw utworzymy katalog, do którego będą wrzucane pliki: /public/uploads oraz nadajemy mu prawa dostępu na 777.

Teraz możemy zdefiniować ten katalog, tak aby był widoczny w projekcie. W tym celu edytuj plik services.yaml (/config/services.yaml) dodając w nim parametr file_directory:

W kolejnym kroku dodaj encję Upload (src/Entity/Upload.php) i zdefiniuj w niej pole file:

Będzie nam jeszcze potrzebny budowniczy formularza: UploadType (src/Form/UploadType.php):

W naszym przykładzie dodajemy (add) do formularza tylko jedno pole typu file (’file’,FileType::class). Dołączamy też odpowiednie klasy komponentów:

Aby można było wybrać wiele plików musimy ustawić w formularzu parametr multiple=”multiple”. W builderze jest to zapis: ’multiple’ => true. Parametr required oznacza, że pole z wyborem pliku/ów jest wymagane. Poniżej kod html formularza żeby to widzieć:

Czas na kontroler, który ogarnie to wszystko, co dotychczas zrobiliśmy 🙂 :

Na samym początku dołączamy klasy, które pisaliśmy: Upload i UploadType:

Ustawiamy uchwyt – $form do utworzonego formularza za pomocą metody createForm(). Zapis $form->handleRequest($request) odbiera żądania HTTP z naszego formularza:

Pobieramy listę plików do zmiennej $files:

i w pętli foreach, za pomocą metody move przenosimy pliki do katalogu wskazanego w parametrze file_directory (z pliku: services.yaml). Metoda getClientOriginalName() ustawia właściwą nazwę pliku np: file.pdf.

Na koniec musimy jeszcze zbudować szablon formularza, zgodnie z tym co napisaliśmy w kontrolerze:

W tym celu zapisz plik upload.html.twig w lokalizacji: templates/upload.html.twig

Odpal stronę w przeglądarce i testuj: http://localhost/public/index.php/upload


PRZYKŁAD na GitHub →