簡體   English   中英

如何在Sonata管理員列表視圖中添加“后備標簽”

[英]How to add a “fallback label” in sonata admin list views

我正在Sonata管理員列表視圖中顯示一些實體關系。 問題:當不存在任何關系時(在我看來這是合法的),表格單元格保持空白:

在此處輸入圖片說明

我想要的基本上是這樣的:

在此處輸入圖片說明

我試圖覆蓋默認模板( base_list_field.html.twig ):

$listMapper
    ->add(
        'example',
        null,
        array(
            'template' => 'AppBundle:Admin:listItemWithFallback.html.twig'
        )
    )
;

但是,即使僅擴展默認模板,現有引用的所有鏈接也會停止工作。 另外,我不知道要在哪里添加備用廣告。 我的AppBundle:Admin:listItemWithFallback.html.twig看起來像這樣:

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

結果如下:

在此處輸入圖片說明

即使當我將整個代碼從base_list_field.html.twig復制到我自己的模板中時,鏈接也停止工作。

因此:如何添加后備標簽而不覆蓋整個默認模板? 我想盡可能少地修改基本模板。

編輯:

這是使用kernel.event_listener一種解決方法,希望有更好的方法可以實現此目的:

services.yml

services:
    empty_cells.listener:
        class: AppBundle\Listener\EmptyAdminTableCellListener
        arguments:
            - '@translator'
        tags:
           - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }

EmptyAdminTableCellListener.php

namespace AppBundle\Listener;

use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;

class EmptyAdminTableCellListener
{
    /**
     * @var TranslatorInterface
     */
    protected $translator;

    /**
     * @param TranslatorInterface $translator
     */
    public function __construct(TranslatorInterface $translator)
    {
        $this->translator = $translator;
    }

    /**
     * @param FilterResponseEvent $event
     */
    public function onKernelResponse(FilterResponseEvent $event)
    {
        $request = $event->getRequest();
        $path    = $request->getPathInfo();

        if (strpos($path, '/admin/') !== false) {
            $emptyText = $this->translator->trans('Not set', [], 'admin');
            $response  = $event->getResponse();
            $content   = $response->getContent();

            $content   = preg_replace(
                ';(<td[^>]*?>)[\s]+?(</td>);is',
                sprintf('$1%s$2', $emptyText),
                $content
            );

            $response->setContent($content);
        }
    }
}

在此處輸入圖片說明

以下是在您的自定義模板中重新創建工作鏈接的方法:

<a href="{{admin.configurationPool.getAdminByAdminCode('librinfo_varieties.admin.species').generateObjectUrl('show', object.species)}}">{{ value }}</a>

具有后備功能和所有功能:

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field %}
    {% if object.species %}
        <a href="{{admin.configurationPool.getAdminByAdminCode('librinfo_varieties.admin.species').generateObjectUrl('show', object.species)}}">{{ value }}</a>
    {% else %}
       {{ 'Your fallback text'|trans() }}
    {% endif %}
{% endblock %}    

希望能有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM