[英]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.