如何在奏鸣曲管理列表视图中添加“后备标签”
Posted
技术标签:
【中文标题】如何在奏鸣曲管理列表视图中添加“后备标签”【英文标题】:How to add a "fallback label" in sonata admin list views 【发布时间】:2017-07-05 14:48:12 【问题描述】:我在 Sonata Admin 列表视图中显示一些实体关系。问题:当不存在关系时(在我的情况下是合法的)表格单元格保持为空:
我想要的基本上是这样的:
我试图覆盖默认模板 (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);
【问题讨论】:
【参考方案1】:以下是在自定义模板中重新创建工作链接的方法:
<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 %
希望有帮助
【讨论】:
以上是关于如何在奏鸣曲管理列表视图中添加“后备标签”的主要内容,如果未能解决你的问题,请参考以下文章