Тип поля Sonata в форме Symfony

Мне нужно создать пользовательскую форму, но используемую в Symfony, поэтому я должен создать форму Symfony. Тем не менее, я хотел бы иметь возможность использовать функциональные типы полей Sonta, такие как ModeListType::class.

До сих пор я создал собственный маршрут в своем администраторе, в действии контроллера я создаю новую форму Symfony. Затем действие контроллера возвращает представление с формой, которая расширяет базовый макет редактирования Sonata.

class ExampleController
{
    public function exampleAction(Request $request)
    {
        $order = new FooBar();

        $modelManager = $this->get('sonata.admin.manager.orm');

        $form = $this->createForm(ExampleType::class, $order, [
            'model_manager' => $modelManager,
        ]);

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            //
        }

        return $this->renderWithExtraParams('admin/test.html.twig', [
            'form' => $form->createView(),
            'action' => 'create',
            'object' => $order,
            'objectId' => null,
        ]);
    }
}

Моя форма:

class ExampleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('job', ModelListType::class, [
                'model_manager' => $options['model_manager'],
            ]);
    }

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

        $resolver->setRequired([
            'model_manager',
        ]);
    }
}

И мой шаблон:

{% extends 'bundles/SonataAdminBundle/CRUD/base_edit.html.twig' %}

{% import "@SonataAdmin/CRUD/base_edit_form_macro.html.twig" as 
form_helper %}

{% block title %}
    Here
{% endblock %}

{% block sonata_tab_content %}
<div class = "col-md-12">
    <div class = "row">
        <div class = "col-md-12">
            <div class = "box box-primary">
                <div class = "box-body">
                    {{ form(form) }}
                </div>
            </div>
        </div>
    </div>
</div>
{% endblock %}

Это отображает ввод без дополнительных кнопок, таких как: Список, Добавить, Удалить. Нажатие на ввод также ничего не делает, поэтому он не рассматривается как ввод Sonata.

Любая помощь в решении этого была бы замечательной.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
272
1

Ответы 1

Поскольку вы переопределяете {% block sonata_tab_content %}, возможно, вам стоит попробовать вставить {% block formactions %}{{parent()}}{{% endblock %}

{% block sonata_tab_content %}
<div class = "col-md-12">
    <div class = "row">
        <div class = "col-md-12">
            <div class = "box box-primary">
                <div class = "box-body">
                    {{ form(form) }}
                </div>
            </div>
        </div>
    </div>
</div>
{% block formactions %}
    {{parent()}}
{{% endblock %}
{% endblock %}

Другие вопросы по теме