假设我有一个控制器操作的以下路由注释:
* @Route("/post/{post_id}/", name="post.view")
* @Route("/post/", name="post.current_view")
我想使用twig为此生成网址:
{{ 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/
有谁知道这是否可以原生成就?我知道我可以正确使用路由器的自定义树枝功能,然后我可以生成路由并剥离查询字符串,但我想避免,如果有一个我错过的容易切换的地方。
答案 0 :(得分:1)
解决方案#1 您只需添加if子句
即可{% if BasePath == 'post.' %}
{{ url(BasePath~'view', {'post_id':post.postId}) }}
{% elseif BasePath == 'post.current_' %}
{{ url(BasePath~'view') }}
{% endif %}
也许不是最优雅但应该有用。
解决方案#2
使用问号分割网址并获取第一个字符串
{% set myUrl = url(basePath~'view', {'post_id':post.postId}) %}
{{ myUrl|split("?")|first }}
解决方案#3 或者您可以通过扩展RoutingExtension类的twig来覆盖url函数。
Symfony\Bridge\Twig\Extension\RoutingExtension
可以找到path
的{{3}}示例,但url
应该相同。
您应该覆盖此功能
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
答案 1 :(得分:0)
我猜不是,你需要一个preg_replace过滤器,这不是原生定义的