SonataAdminBundle与sonata_type_collection并上传图片

Joh*_*iw2 5 symfony symfony-sonata symfony-2.1 sonata-admin

在Sonata Admin中,我想在sonata_type_collection中使用上传和预览图片文件.

在我的Admin/ItemAdmin.php中:

class ItemAdmin extends Admin
{

    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('title')
            ->with('Photos')
            ->add('pictures', 'sonata_type_collection', array(
                'label' => 'Pictures',
                'by_reference' => false,
                'required' => false,
                ), array(
                'edit' => 'inline',
                'inline' => 'table',
                'sortable' => 'id'
            ))
            ->end()
        ;
    }
Run Code Online (Sandbox Code Playgroud)

在我的Admin/ItemPictureAdmin.php中:

class ItemPictureAdmin extends Admin {

    protected function configureFormFields(FormMapper $formMapper) {
        $obj = $this->getSubject();

        $formBuilder = $formMapper->getFormBuilder();

        if(is_object($obj) && $obj->getPicture())
        {   
            $formMapper
            ->add('picturePreview', 'image_preview', array(
                'required' => false,
                'property_path' => false,
                'upload_dir' => '/uploads/picture/',
                'file_name' => $obj->getPicture()
            ));
        }
        $formMapper->add('pictureFile', 'file', array('label' => 'Pic'));
    }
Run Code Online (Sandbox Code Playgroud)

"image_preview"类型是我用一个简单的模板树枝创建的新类型,用于显示图片.

预览:http://i.stack.imgur.com/AC0ih.png

问题1:我有两张图片记录在数据库中,有两个不同的图片文件,但在列表中,它只显示第一张图片.

问题2:无法更新图片...我必须删除记录并再次上传新文件.

小智 0

我自己也碰到了第一期。我尝试了所有可能的解决方案,但没有任何效果。我尝试了一些解决方案,其中一个很好。
我做了什么:

  • 我在会话中保存了子实体的索引(在您的例子中为 ItemPictureAdmin),当我需要一个实体时,我将从会话中获取索引,并从父实体的列表中获取具有该索引的元素。

  • 首先,我保存在会话索引 0 中,并在 ItemPictureAdmin 中使用索引 0 访问其 ItemPictureAdmin 的父列表

  • 之后,我增加了会话中的索引。从列表中获取所有元素后,我删除了保存索引的会话参数。

该解决方案是对caponica 解决方案的改编