【问题标题】:get route from url从 url 获取路由
【发布时间】:2012-01-03 23:10:16
【问题描述】:

Symfony2 中,你知道如何从控制器中的 url 找到路由吗? 我有这个例子:

$params = $router->match('/blog/my-blog-post');
// array('slug' => 'my-blog-post', '_controller' => 'AcmeBlogBundle:Blog:show')

$uri = $router->generate('blog_show', array('slug' => 'my-blog-post'));
// /blog/my-blog-post

如果我有/blog/my-blog-post,我想找到blog_show

谢谢

【问题讨论】:

    标签: controller routes symfony


    【解决方案1】:

    我不知道你在那个$router 中有什么,但是通过路由器服务,我在这里得到了这个:

    $this->get('router')->match('/')
    
    array
      '_controller' => string 'Namespace\Foo\MyController::indexAction'
      '_route' => string 'home'
    

    如果你想要当前页面的路由名称,你可以从请求对象中读取它:$request->attributes->get('_route')

    【讨论】:

    • $router:这是 symfony 文档示例。我他们的例子他们没有显示'_route'。我会用的,谢谢! ;)
    【解决方案2】:

    我最近发现 match() 方法使用当前请求的 HTTP METHOD 来匹配请求。因此,例如,如果您正在执行 PUT 请求,它将尝试将您提供的 URL 与 PUT 方法匹配,从而导致 MethodNotAllowedException 异常(例如,获取引用者)。

    https://stackoverflow.com/a/16506062/100675中查看更多信息

    【讨论】:

      【解决方案3】:

      如果使用绝对路径,你会得到同样的错误,这是我在需要匹配引用者时所做的

      $ref = str_replace("app_dev.php/", "", parse_url($request->headers->get('referer'),PHP_URL_PATH ));
      $route = $this->container->get('router')->match($ref)['_route'];
      

      【讨论】:

      • 不错,但如果您使用的是“dev”和“prod”以外的其他环境,它就不起作用,对于某些开发人员来说可能就是这种情况。
      猜你喜欢
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 2016-06-15
      • 2016-05-13
      相关资源
      最近更新 更多