我在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);
}
}
}
答案 0 :(得分:0)
以下是如何在自定义模板中重新创建工作链接:
<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 %}
希望有所帮助