Я пытаюсь загрузить файл через созданный мной контроллер конечной точки API:
/**
* @Route("/upload", methods = "POST")
*/
public function upload(Request $request)
{
$form = $this->createForm(UserFileType::class);
$form->handleRequest($request);
if (!$form->isSubmitted()) {
dd($request->files->get('file'));
}
...
dd($request->files->get('file')) показывает мой файл, как и ожидалось, поэтому я не понимаю, почему isSubmitted() возвращает false, когда метод получает multipart/form-dataPOST запрос с данными. Я отправляю POST запрос через Postman. Почему форма не отправляется?
Тип файла пользователя:
class UserFileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('file', FileType::class, [
'mapped' => false,
'required' => true,
'constraints' => [
new File([
'maxSize' => '2M',
'mimeTypes' => [
'application/pdf',
'application/x-pdf',
],
'maxSizeMessage' => 'The file size must not exceed {{ limit }} {{ suffix }}.',
'mimeTypesMessage' => 'The file type {{ type }} is not valid',
])
],
]);
}
@OluwafemiSule, пожалуйста, смотрите редактирование, добавляющее UserFileType.
Что вы получаете, устанавливая метод формы при построении формы в UserFileType? $builder->setMethod('POST')->add('...')
После добавления ->setMethod('POST') в $builder и публикации файла isSubmitted по-прежнему возвращает false
Не могли бы вы проверить вывод $form->getErrors() и добавить его, если необходимо, пожалуйста.
@Lounis dd($form->getErrors()) возвращает пустое значение






Для классов форм, производных от AbstractType, форма именуется с использованием fqcnToBlockPrefix , когда она создается с помощью FormFactory.
Подтвердить это можно дампом $form->getName().
Теперь реализованный метод $form->handleRequest выполняет ряд проверок через обработчик запросов перед отправкой формы.
Ваша форма не отправляется с помощью метода обработчика запросов handleRequest, потому что поля в запросе неправильно сопоставлены с именем вашей формы.
Вы должны сопоставить имя формы в запросе HTTP POST следующим образом:
[ "user_file" => [ "file" => <uploaded file> ] ]
Это может оказаться не так просто в Postman.
Поэтому я рекомендую реализовать вашу форму как безымянную форму вместо того, чтобы переопределить getBlockPrefix для возврата пустой строки.
class UserFileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
//...
}
public function getBlockPrefix()
{
return '';
}
}
Поскольку это первая ветка SO, которая подходит для ключевых слов handlerequest issubmitted false, я подумал, что поделюсь тем, что сработало для моей команды по смежной проблеме.
Мы получали false ответ при выполнении PATCH запроса. В конце концов мы поняли, что пренебрегали передачей Request::METHOD_PATCH в опции method при создании формы. Ввода тернарного оператора, устанавливающего это значение, было достаточно, чтобы решить нашу проблему.
Я надеюсь, что это помогает кому-то.
Что такое
UserFileType? Там может быть несоответствие в полях, определенных там и в вашем запросе. Либо это, либо несоответствие в методе класса формыUserFileType.