How to display the current picture above the upload field in SonataAdminBundle?

后端 未结 7 2053
广开言路
广开言路 2021-02-01 20:31

I am using SonataAdminBundle (with Doctrine2 ORM) and I have successfully added a file upload feature to my Picture model.

I would like, on the

7条回答
  •  死守一世寂寞
    2021-02-01 20:57

    I have managed to put the image above the field in the edit form. But my solution is a little bit specific, because I use Vich Uploader Bundle to handle uploads, so the generation of the image url was a little bit easier thanks to bundle helpers.

    Let's look at my example, a film poster field in a film entity. This is part of my admin class:

    //MyCompany/MyBundle/Admin/FilmAdmin.php
    
    class FilmAdmin extends Admin {
    
    protected function configureFormFields(FormMapper $formMapper)
    {
     $formMapper
         ->add('title')
     ....
         ->add('poster', 'mybundle_admin_image', array(
                    'required' => false,
                    ))
    }
    

    mybundle_admin_image is handled by a custom field type, that is just a child of file type by setting it's getParent method: (don't forget to register your type class as a service)

    //MyCompany/MyBundle/Form/Type/MyBundleAdminImageType.php
    
    public function getParent()
    {
        return 'file';
    }
    

    Then I have a template that extends Sonata's default styling, and I have it included in the admin class:

    //MyCompany/MyBundle/Admin/FilmAdmin.php
    
    public function getFormTheme() {
        return array('MyCompanyMyBundle:Form:mycompany_admin_fields.html.twig');
    }
    

    And finally I have a block for my custom image type that extends the basic file type:

    //MyCompany/MyBundle/Resources/views/Form/mycompany_admin_fields.html.twig
    
    {% block mybundle_admin_image_widget %}
    {% spaceless %}
        {% set subject =  form.parent.vars.value %}
        {% if subject.id and attribute(subject, name) %}
            
                
            
    {% endif %} {% set type = type|default('file') %} {% endspaceless %} {% endblock %}

    This causes that a 200px wide preview of image (if exists) is shown above the upload field, linked to it's full size version opening in new tab. You can customize it as you want, e.g. adding a lightbox plugin.

提交回复
热议问题