symfony - SonataAdminBundle 与 Sonata_type_collection 并上传图片

标签 symfony symfony-2.1 symfony-sonata 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()
        ;
    }

在我的 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'));
    }

“image_preview”类型是我用一个简单的模板 Twig 创建的新类型来显示图片。

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

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

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

最佳答案

我自己碰到了问题 1。我尝试了我找到的所有可能的解决方案,但没有任何效果。我尝试了一些解决方案,一个很好。
我做了什么:

  • 我在 session 中保存了子实体的索引(在您的情况下为 ItemPictureAdmin),当我需要一个实体时,我会从 session 中获取索引并从父实体的列表中获取具有该索引的元素。
  • 首先,我保存在 session 索引 0 中,并在 ItemPictureAdmin 中访问他的 ItemPictureAdmin 父列表,索引为 0
  • 在此之后,我增加了 session 中的索引。从列表中获取所有元素后,我删除了保存索引的 session 参数。

  • 此解决方案是对 caponica 解决方案的改编 here

    关于symfony - SonataAdminBundle 与 Sonata_type_collection 并上传图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357482/

    相关文章:

    php - native 查询不补水 scalarResult

    javascript - 使用 symfony 的 .post 函数中的 PHP 文件

    php - Symfony2 中的 CollectionType 验证

    symfony - 如何在 Symfony 2.1 中使用 ChoiceList?

    symfony - SonataAdminBundle 中不存在函数 "is_granted"

    symfony - Sonata 表单字段 - 根据另一个模型字段的选择更改字段

    php - 发现所有实现接口(interface)的类

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

    symfony - 在 symfony 2.1 中安装并运行 LiipImagineBundle

    symfony - 在 Symfony2 中保留用户操作日志