【问题标题】:How to get route from twig extension class如何从树枝扩展类中获取路线
【发布时间】:2014-08-11 07:46:56
【问题描述】:
class AdminExtension extends \Twig_Extension
{
   // content...
}

我正在通过添加一个添加新 twig 方法的类来扩展 twig 功能。在这种方法中,我想使用当前路线。我该怎么做?

我的意思是,例如,拥有:

www.someurl.com/prefix/controller1/aaa/bbb/ccc/ddd

我想在我描述的函数中获取controller1/aaa/bbb/ccc/ddd 部分。

谢谢!

【问题讨论】:

  • 你的Twig_Extension 类应该被定义为一个服务,然后你可以在那里注入request 服务,尽管你可能会遇到一些服务范围问题。然后,request 服务有一个 getRequestUri() 方法,该方法将准确返回其名称状态。
  • 确实,我正在注入RouterInterface服务,但是如何得到我所描述的呢?
  • 你需要request,而不是router
  • 从同一个 Request 类中尝试 getUri() 方法:api.symfony.com/2.5/index.html?q=HttpFoundation\Request#method_getRequestUri

标签: symfony


【解决方案1】:

您应该将扩展注册为服务,然后在服务中注入request_stack(从 Symfony 2.4 开始):

my_extension:
    class: ...
    arguments: ["@request_stack"]
    tags: [{ name: twig.extension }]

然后你可以使用RequestStack#getCurrentRequest()获取请求,使用Request#getUri()获取当前url。

【讨论】:

  • 好的,但是如果 uri 是空的,比如 www.someurl.com/controller1/ 并且正在使用默认路由怎么办?请求堆栈将返回空字符串,而它应该返回默认路由...
  • @user3486978 当url为someurl.com/controller1/且前端控制器在someurl.com/时,Request#getPathInfo()会返回/controller1/
  • 但是如果默认路由是/path/1,url是someurl.com/controller1/,它应该返回/controller1/path/1,而不是/controller1/。
  • 可以这样做吗?
  • 你能定义“默认路由”吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
相关资源
最近更新 更多