在 Sonata Admin 列表视图中显示不同的实体

Posted

技术标签:

【中文标题】在 Sonata Admin 列表视图中显示不同的实体【英文标题】:Showing different entities in Sonata Admin list view 【发布时间】:2017-04-15 14:19:40 【问题描述】:

我有这个实体,它包含entityName 属性和entityId 属性:

    /**
     * @var string
     *
     * @ORM\Column(name="entityName", type="string", length=255)
     */
    private $entityName;

    /**
     * @var integer
     * @ORM\Column(name="entityId", type="integer")
     */
    private $entityId;

我不想使用__toString() 函数显示此实体,而是想实际返回具有名称和ID 的实体。并在奏鸣曲管理列表视图中显示。

现在,这里是__toString

public function __toString()

    return $this->entityName . ":" . $this->entityId;

应该返回类似:

public function __toString()

    return $em->getRepository($this->entityName)->find($this->entityId);

我希望我已经很好地描述了我的问题。 tnx

【问题讨论】:

【参考方案1】:

一种解决方法是为奏鸣曲使用自定义列表块。

    create a new twig filter 称为entityFilter,此过滤器会将奏鸣曲管理对象的 FQCN 转换为奏鸣曲生成的可读路由名称。喜欢admin_blablabla_show:

    public function entityFilter($entityName)
    
        $str = str_replace('\\', '_', $entityName);
        $str = str_replace('Bundle', '', $str);
        $str = str_replace('_Entity', '', $str);
        $str = 'Admin' . $str . '_Show';
        return strtolower($str);
    
    
    public function getName()
    
        return 'my_extension';
    
    

    在您的管理类中,将所需字段的模板设置为新的树枝模板:

        ->add('orderItems', null, array(
            'template' => 'AcmeBundle::order_items_list.html.twig'
        ))
    

    在您的新树枝模板 (order_items_list.html.twig) 中:

    % extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %
    % block field %
    <div>
        % for item in object.orderItems %
            % if entity(item.entityName) == 'admin_first_entity_show' %
                % set foo = 'Apple ID' %
            % elseif entity(item.entityName) == 'admin_second_entity_show' %
                % set foo = 'Device Accessory' %
            % else %
                % set foo = 'Not defiend' %
            % endif %
    
            <a target="_blank" class="btn btn-default btn-xs" href=" path(entity(item.entityName), 'id': item.entityId) "><i class="fa fa-external-link"></i>  foo </a>
        % endfor %
    </div>
    % endblock %
    

【讨论】:

以上是关于在 Sonata Admin 列表视图中显示不同的实体的主要内容,如果未能解决你的问题,请参考以下文章

Sonata Admin + 在列表视图中显示所有项目(不是每页)

在 Sonata Admin 的列表视图(角色/权限)中编辑

Symfony3.1 & Sonata Admin - 列表字段的模板被忽略

Sonata Admin - 只允许显示登录用户创建的内容

Sonata Admin:想要创建全局配置页面

按相关实体字段排序 Sonata Admin 中的列表视图