#symfony #sonata-admin #sonata
#symfony #sonata-администратор #sonata
Вопрос:
Мне нужно создать пользовательскую форму, но используемую в 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() amp;amp; $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.
Любая помощь в решении этой проблемы была бы отличной.
Ответ №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 %}