В 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. В зависимости от ваших требований и сложности приложения, может потребоваться дополнительная настройка и обработка данных.