Как вставить картинку на форму в Symfony?

В Symfony для вставки картинки на форму можно использовать виджет FileType и использовать стандартный шаблон формы.

Шаги для вставки картинки на форму в Symfony:

1. Создайте форму с использованием компонента Symfony Form:

use SymfonyComponentFormExtensionCoreTypeFileType;
use SymfonyComponentFormExtensionHttpFoundationDisableCsrfProtectionListener;
use SymfonyComponentFormExtensionCoreTypeSubmitType;
use SymfonyComponentFormFormBuilderInterface;

...

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('image', FileType::class, [
            'label' => 'Выберите картинку',
            'mapped' => false,
            'required' => false,
        ])
        ->add('save', SubmitType::class, ['label' => 'Сохранить']);
}

2. В контроллере, который отвечает за обработку формы, добавьте логику для сохранения загруженной картинки. Можно использовать обработчик формы:

use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentRoutingAnnotationRoute;
use SymfonyBundleFrameworkBundleControllerAbstractController;

...

/**
 * @Route("/form", methods={"POST"})
 */
public function processForm(Request $request)
{
    $form = $this->createForm(MyFormType::class);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $image = $form->get('image')->getData();
        $newFilename = md5(uniqid()) . '.' . $image->guessExtension();
        $image->move(
            $this->getParameter('images_directory'),
            $newFilename
        );

        // Дополнительные действия при сохранении файла (например, сохранение его пути в базу данных)

        return $this->redirectToRoute('form_success');
    }

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

3. В шаблоне формы (например, form.html.twig) используйте класс Bootstrap для отображения и стилизации полей формы:

{% extends 'base.html.twig' %}

{% form_theme form _self %}

{% block form_widget_simple %}
    {% if 'file' == type %}
        <div class="form-group">
            <label for="{{ id }}" class="control-label">{{ label }}</label>
            <input type="{{ type }}" id="{{ id }}" name="{{ full_name }}" {{ block('widget_attributes') }} class="form-control-file">
        </div>
    {% else %}
        {{- parent() -}}
    {% endif %}
{% endblock %}

{% block form_row %}
    <div class="form-group">
        {{- form_label(form, null, { 'label_attr': {'class': 'control-label'} }) -}}
        {{- form_widget(form, { 'attr': {'class': 'form-control'} }) -}}
        {{- form_errors(form) -}}
    </div>
{% endblock %}

{% block submit_widget %}
    <button type="submit" {{ block('attributes') }} class="btn btn-primary">{{ value }}</button>
{% endblock %}

4. Обновите конфигурацию Symfony в файле config/packages/twig.yaml добавив путь к директории для сохранения файлов:

twig:
    ...
    paths:
        '%kernel.project_dir%/public/uploads': images_directory

Теперь, при отображении формы на странице, вы должны видеть поле для загрузки картинки. При отправке формы, файл будет загружен в указанную директорию, и вы можете добавить необходимую логику для сохранения его пути или обработки изображения.

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