0

假设我对控制器操作有以下路由注释:

* @Route("/post/{post_id}/", name="post.view")
* @Route("/post/", name="post.current_view")

我想用树枝为此生成网址:

{{ url(basePath~'view', {'post_id':post.postId}) }}
//basePath will either be "post." or "post.current_"

我目前得到的是:

domain.com/post/1/
domain.com/post/?post_id=1

我想要的是生成第二条路由,忽略传递给它的任何“EXTRA”参数,这样我只会得到:

domain.com/post/

有谁知道这是否可以在本地完成?我知道我可以纠正一个使用路由器的自定义 twig 函数,然后我可以生成路由并剥离查询字符串,但我想避免这种情况,如果我错过的某个地方有一个简单的切换。

4

2 回答 2

1

解决方案 #1你可以添加一个 if 子句

{% if BasePath == 'post.' %}
    {{ url(BasePath~'view', {'post_id':post.postId}) }}
{% elseif BasePath == 'post.current_' %}
    {{ url(BasePath~'view') }}
{% endif %}

也许不是最优雅的,但应该可以。

解决方案#2

用问号分割 url 并获取第一个字符串

{% set myUrl = url(basePath~'view', {'post_id':post.postId}) %}
{{ myUrl|split("?")|first }}

解决方案#3或者您可以通过扩展 twig 的 RoutingExtension 类来覆盖 url 函数。

Symfony\Bridge\Twig\Extension\RoutingExtension

可以在这里找到一个例子,pathurl应该是一样的。

您应该覆盖此功能

 public function getUrl($name, $parameters = array(), $schemeRelative = false)
    {
        return $this->generator->generate($name, $parameters, $schemeRelative ? UrlGeneratorInterface::NETWORK_PATH : UrlGeneratorInterface::ABSOLUTE_URL);
    } 

您的函数可能如下所示:

public function getUrl($name, $parameters = array(), $schemeRelative = false)
{
   $yourUrl = parent::getUrl($name, $parameters = array(), $schemeRelative = false);
   return strstr($yourUrl, '?' , true);
}

它删除了问号之后的所有内容。

要覆盖默认类,您必须添加到参数

twig.extension.routing.class: MyNamespace\MyRoutingExtension
于 2014-09-05T09:18:37.827 回答
0

我猜不是,你需要一个 preg_replace 过滤器,这不是本机定义的

于 2014-09-05T08:34:17.990 回答