所以我试图扩展SonataAdmin show视图以获得文档的版本列表(phpcr checkpoint或checkin)。
我已正确显示已保存版本的列表,现在我需要将它们显示为显示该内容版本的链接,但我在尝试添加自定义时遇到以下错误路线:
An exception has been thrown during the rendering of a template
("Parameter "id" for route "admin_cmsbundle_product_show_version" must
match "[^/]++" ("mstr/product/product-253562" given) to generate a
corresponding URL.") in CmsBundle:product:show.html.twig at line 18.
这是我的管理类中的configureRoutes:
protected function configureRoutes(RouteCollection $collection)
{
$collection->add('show_version', $this->getRouterIdParameter() . '/show/{version}');
}
这是我的覆盖模板:
{% block show %}
<ul>
{% for version in versions %}
<li><a href="{{ admin.generateObjectUrl('show_version', object, {'version': version.name}) }}">Version: {{ version.name }} </a></li>
{% endfor %}
</ul>
{{ parent() }}
{%endblock%}
这是我编辑过的show动作(包括版本列表):
public function showAction($id = null)
{
...
return $this->render($this->admin->getTemplate('show'), array(
'action' => 'show',
'object' => $object,
'elements' => $this->admin->getShow(),
'versions' => $this->getVersionHistory($object)
));
}
这是我在控制器中的showVersion动作:
public function showVersionAction($id = null, $version = "1.0")
{
...
return $this->render($this->admin->getTemplate('show'), array(
'action' => 'show',
'object' => $this->getVersion($object, $version),
'elements' => $this->admin->getShow(),
'versions' => $this->getVersionHistory($object)
));
}
注意,generateUrl给出了同样的错误:
<a href="{{ admin.generateUrl('show_version', {'id': object.id, 'version': version.name}) }}">Version: {{ version.name }} </a>
我做错了什么?
任何有关修复此问题的帮助都将非常感激:)
答案 0 :(得分:0)
根据错误消息,$object
存在一些问题。因此,可以使用generateUrl
代替generateObjectUrl()
并在数组中传递您的ID:
{% block show %}
<ul>
{% for version in versions %}
<li><a href="{{ admin.generateUrl('show_version', {'id':object.id,'version': version.name}) }}">Version: {{ version.name }} </a></li>
{% endfor %}
</ul>
{{ parent() }}
{% endblock %}
答案 1 :(得分:0)
有点挖掘并且答案很简单,只需要覆盖id的模式。+
protected function configureRoutes(RouteCollection $collection)
{
$collection->add('show_version', $this->getRouterIdParameter() . '/show/{version}', array(), array('id' => '.+'));
}