简体   繁体   中英

How to show field value in sonata edit form?

There is edit form. One field should not be editable. I have tried to set options disabled=true, attr => ['readonly' => true], they make it uneditable, but when submitting form, it gets submitted, sets null to that field and then I get error when getting that field value because it cannot be null.

So I want to make that field not even exist as field but show its value in edit form. Is there a way to do it? Or also if you know how to get rid of error when submitting form with disabled field, that would work too.

 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])
            ;
        }
    }

Currently I get error:

Type error: Return value of Qms\\ClaimComponent\\Status\\ManagedModel\\StatusManaged::getProject() must implement interface Qms\\CoreComponent\\Domain\\Project\\ManagedModel\\ProjectManagedInterface, null returned

That is because field value is set to null if I have disabled field.

One way could be rewrite edit.html.twig, now sonatas default template is used. But I did not find quick way, if I override, the styling is off. For one field looks bit too much.

If you don't mind that field's value when submitting you can unmap it by setting

'mapped' => false

in its attributes.

Example:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM