Symfony 形式的奏鸣曲字段类型

Posted

技术标签:

【中文标题】Symfony 形式的奏鸣曲字段类型【英文标题】:Sonata Field Type in Symfony Form 【发布时间】:2019-08-11 00:12:40 【问题描述】:

我需要创建一个在 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。单击输入也不会执行任何操作,因此它不会被视为奏鸣曲输入。

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

【问题讨论】:

【参考方案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 %

【讨论】:

以上是关于Symfony 形式的奏鸣曲字段类型的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 - 奏鸣曲 Datagrid 过滤器操作符转换为教义_orm_class 字段失败

在普通表单类上使用奏鸣曲字段类型

多个嵌套集合字段和奏鸣曲类型集合

如何在奏鸣曲中获取字段类型的自定义值?

使用更多表单字段扩展奏鸣曲用户包,获取无法加载类型“Application\Sonata\UserBundle\Form\RegistrationType”

以奏鸣曲管理员的编辑形式为用户设置角色