如何在奏鸣曲编辑表单中显示字段值?

Posted

技术标签:

【中文标题】如何在奏鸣曲编辑表单中显示字段值?【英文标题】:How to show field value in sonata edit form? 【发布时间】:2020-12-17 03:29:31 【问题描述】:

有编辑表格。一个字段不应该是可编辑的。我试图设置选项 disabled=true,attr => ['readonly' => true],它们使它不可编辑,但是在提交表单时,它被提交,将 null 设置为该字段,然后在获取该字段时出现错误值,因为它不能为空。

所以我想让该字段甚至不作为字段存在,而是在编辑表单中显示其值。有没有办法做到这一点?或者,如果您知道如何在提交带有禁用字段的表单时消除错误,那也可以。

 public function configureFormFields(FormMapper $form)
    
        if ($this->subject->getId() === null) 
            $form
                ->add('name', 'text', ['required' => true])
                ->add('codeMod', 'text', ['required' => true])
                ->add('position', 'text', ['required' => false])
                ->add('projectMod', EntityType::class, ['class' => ProjectEntity::class])
                ->add('active', 'checkbox', ['required' => false])
                ->add('first', 'checkbox', ['required' => false])
                ->add('last', 'checkbox', ['required' => false])
                ->add('denialReasons', 'text', ['required' => false])
            ;
         else 
            $form
                ->add('name', 'text', ['required' => true])
                ->add('position', 'text', ['required' => false])
//                ->add('project', TextType::class, ['label' => 'form.label_project_mod', 'attr' => [/*'readonly' => true,*/ 'disabled' => true]])
                ->add('project', EntityType::class,
                    ['label' => 'form.label_project_mod', 'class' => ProjectEntity::class, 'attr' => ['readonly' => true, 'disabled' => true],
//                        'template' => 'ClaimClaimBundle:ClaimStatusAdmin:show_project.html.twig'
                    ]
                )
//                ->add('projectMod', TextType::class, ['label' => 'form.label_project_mod', 'attr' => [/*'readonly' => true,*/ 'disabled' => true]])
                ->add('active', 'checkbox', ['required' => false])
                ->add('first', 'checkbox', ['required' => false])
                ->add('last', 'checkbox', ['required' => false])
                ->add('denialReasons', 'text', ['required' => false])
            ;
        
    

目前我收到错误:

类型错误:Qms\ClaimComponent\Status\ManagedModel\StatusManaged::getProject()的返回值必须实现接口Qms\CoreComponent\Domain\Project\ManagedModel\ProjectManagedInterface,返回null

这是因为如果我禁用了字段,则字段值设置为 null。

一种方法是重写edit.html.twig,现在使用奏鸣曲默认模板。但是我没有找到快速的方法,如果我覆盖,样式就会关闭。一个字段看起来有点太多了。

【问题讨论】:

您可以为实体中的该字段分配一个默认值。 【参考方案1】:

如果您在提交时不介意该字段的值,可以通过设置取消映射

'mapped' => false

在它的属性中。

例子:

->add('name', 'text', ['required' => true, 'mapped' => false])

【讨论】:

以上是关于如何在奏鸣曲编辑表单中显示字段值?的主要内容,如果未能解决你的问题,请参考以下文章

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

奏鸣曲管理员列表可编辑与编辑/显示冲突

如何在编辑时设置奏鸣曲形式 data_class

根据值在 Admin 中自定义 Django 表单字段

如何在没有表单字段的情况下从表单传递数据? (PHP)

如何在模态(表单)中传递数据来编辑值?