Путаница в документации по загрузке Symfony 4

Я изучаю Symfony 4 прямо сейчас, и я наткнулся на эту документацию о загрузке файлов на странице контроллера, которую я запутал.

public function new(Request $request)
{
    $product = new Product();
    $form = $this->createForm(ProductType::class, $product);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        // $file stores the uploaded PDF file
        /** @var Symfony\Component\HttpFoundation\File\UploadedFile $file */
        $file = $product->getBrochure();

При отправке формы $ файл использовался для хранения содержимого загруженного файла, как указано в аннотации. Но какой смысл в этом $ продукт-> getBrochure ()? $ продукт не должен содержать ничего внутри, поскольку он был недавно создан из сущности Product.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
438
2

Ответы 2

В вашем контроллере вы создаете форму с базовым объектом для хранения данных, которые являются сущностью продукта. Доступ к контроллеру можно получить двумя способами.

сначала в методе GET без каких-либо данных формы, а затем в методе POST с данными из полей формы. В Symfony данные из полей формы будут автоматически помещаться в вашу сущность и даже автоматически проверяться. Все бывает с линией

$form->handleRequest($request);

Таким образом, данные загруженного файла также хранятся в объекте, и если вы хотите получить к нему доступ, вам придется получить его из объекта с помощью общедоступного метода, такого как $ product-> getBrochure ();

Эти неявные действия кажутся мне такими странными. Но разве в приведенной выше аннотации еще нет файла $?

reddy 12.03.2018 00:35

Это кажется странным, потому что вы новичок в Symfony. Позже вы откроете для себя силу сущностей и привыкнете к такому поведению. Разве загрузка файлов уже не является чем-то необычным в PHP?

Frank B 12.03.2018 18:34

Кажется, что документация на странице загрузки файлов Symfony 4 неверна. Возможно, для вас это немного поздно, но проблема все еще существует. Вместо того, чтобы использовать:

$file = $product->getBrochure();

использовать:

$file = $form['brochure']->getData();

Первый вернет имя файла, которое является строкой, а второй - сам файл.

Другие вопросы по теме