Symfony形式的奏鸣曲场类型

问题描述 投票:0回答:1

我需要创建一个自定义表单,但在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 %}

这将呈现一个没有其他按钮的输入,如:List,Add,Delete。单击输入也不会执行任何操作,因此不会将其视为Sonata输入。

解决这个问题的任何帮助都会很棒。

symfony sonata-admin sonata
1个回答
0
投票

当你覆盖{% 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 %}
© www.soinside.com 2019 - 2024. All rights reserved.