Symfony HttpFoundation получает один файл, возвращает ноль?

Я использую symfony HttpFoundation для загрузки файлов, FileBag работает, если я вызываю all(), но если я использую get('document_name'), он возвращает null.

use Symfony\Component\HttpFoundation\Request;


    public function saveFileAction(Request $request) {
        dump($request->files->all());
        dump($request->files->get('document'));
    }

Для all() я получаю следующий ответ:

FileController.php on line 175:
array:1 [▼
  "form" => array:1 [▼
    "document" => UploadedFile {#14 ▶}
  ]
]

Что я делаю неправильно здесь? Кто-нибудь знает, почему я не могу получить один файл с помощью метода get()? Я нашел в документации symfony, что $request->files->get('document') должен работать...


person samius polis    schedule 23.10.2018    source источник
comment
Вы уверены, что атрибут name входного файла не равен form[document]? Если это так, вы должны использовать get('form')['document'].   -  person Taylan    schedule 23.10.2018
comment
@Taylan имя входного атрибута моего файла точно такое: form[document], и с помощью get('form')['document'] я получаю уведомление о том, что индекс не установлен   -  person samius polis    schedule 23.10.2018
comment
Каков результат, когда вы просто используете get('form')?   -  person Taylan    schedule 23.10.2018
comment
Только поле _token   -  person samius polis    schedule 23.10.2018
comment
Вам нужно использовать get on $request->files. Возможно, вы используете его на $request->request?   -  person Taylan    schedule 23.10.2018
comment
Нет, вы можете видеть в моем примере, что это использование $request->files->get('document')   -  person samius polis    schedule 24.10.2018


Ответы (1)


$request->files->get("document") правильно, если поле POST действительно называется так. (Чтобы быть уверенным, обратитесь к сетевому инспектору вашего браузера.) Я подозреваю, что поле называется по-другому, иначе это было бы работать.

Если он исходит из ввода файла в классе управляемой формы, вместо этого вы должны использовать $form->get("document")->getData(); для извлечения своего экземпляра UploadedFile. Судя по имени form[document], которое вы упомянули в комментарии, и выводу $request->files->all(), весьма вероятно, что это так.

Если вам действительно нужно прочитать его в необработанном виде из атрибутов запроса, вам нужно будет использовать $request->files->get("form[document]");, поскольку Symfony не расширит входное имя формы, похожее на массив, при чтении его в необработанном виде из атрибутов запроса. Это то же самое, если бы у вас был ввод текстового поля, вам пришлось бы читать его с помощью $request->request->get("form[firstName]");, но, как я уже упоминал, вы должны правильно использовать способ класса управляемой формы $form->get("document")->getData();, если это действительно управляемая форма. (Symfony уже продумала это за вас заранее, включая каскадирование входного ответа на правила проверки и модели данных.)

В противном случае мне было бы интересно узнать, как вы загружаете эту форму в первую очередь. (Это АЯКС?)

person Adambean    schedule 24.10.2018