Можно ли как-то без «дебилизма» загрузить файл в Symfony?

Конечно, в Symfony есть несколько способов загрузки файла, и ни один из них не требует "дебилистических" действий. Symfony предоставляет мощный компонент Form, который обеспечивает удобную обработку и валидацию полей формы, включая файлы.

Вот шаги, которые нужно выполнить, чтобы загрузить файл в Symfony без "дебилизма":

1. Создайте форму, используя компонент Form. Форма должна содержать поле типа FileType, которое будет использоваться для загрузки файла. Вот пример создания формы в Symfony:

use SymfonyComponentFormExtensionCoreTypeFileType;
use SymfonyComponentFormExtensionCoreTypeSubmitType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;

class MyFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('file', FileType::class)
            ->add('submit', SubmitType::class);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => MyFormData::class,
        ]);
    }
}

2. Обработайте запрос в контроллере. Symfony автоматически привяжет отправленные данные к вашей форме. В контроллере вам нужно создать объект формы, передать его в метод handleRequest и проверить, валидны ли данные. Если данные валидны, то вы можете сохранить загруженный файл в нужное место, например, в директорию uploads. Вот пример обработки запроса в контроллере:

use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentRoutingAnnotationRoute;

class MyController extends AbstractController
{
    /**
     * @Route("/upload", name="upload")
     */
    public function upload(Request $request)
    {
        $form = $this->createForm(MyFormType::class);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $file = $form->get('file')->getData();
            // Сохраните файл в нужное место
            $file->move($this->getParameter('upload_directory'), $file->getClientOriginalName());

            // Другие действия после успешной загрузки файла
        }

        return $this->render('upload.html.twig', [
            'form' => $form->createView(),
        ]);
    }
}

3. Создайте шаблон для отображения формы. В этом шаблоне вы можете использовать простые теги HTML для отображения формы загрузки файла. Вот пример шаблона Twig:

<form method="POST" enctype="multipart/form-data">
    {{ form_widget(form) }}
    <button type="submit">Загрузить</button>
</form>

4. Настройте конфигурацию Symfony, чтобы указать путь для сохранения загруженных файлов. В файле config/packages/framework.yaml добавьте следующую строку:

parameters:
    upload_directory: '%kernel.project_dir%/public/uploads'

Обратите внимание, что "%kernel.project_dir%" будет заменено на абсолютный путь к вашему проекту.

Вот и все! Теперь вы можете без проблем загружать файлы в Symfony, используя компонент Form и простые действия контроллера. Никакого "дебилизма" не требуется.