将URL匹配到Symfony中的路由

时间:2014-11-16 12:26:31

标签: symfony url-routing

我们有身份验证后面的文件,如果用户使用文件的URL和HTML资源的URL输入应用程序,我想为验证后重定向执行不同的操作。

我有一个网址:https://subdomain.domain.com/resource/45/identifiers/567/here/11abdf51e3d7-some%20file%20name.png/download。我想获取此URL的路由名称。

app/console router:debug输出:_route_name GET ANY subdomain.domain.{tld} /resource/{id2}/identifiers/{id2}/here/{id3}/download

Symfony有一个路由组件(http://symfony.com/doc/current/book/routing.html),我试图在Symfony IOC提供的match()实例上调用Symfony\Bundle\FrameworkBundle\Routing\Router。我尝试过使用域而没有域,但它们都创建了MethodNotAllowed异常,因为无法找到路由。如何将此URL与路径匹配?

4 个答案:

答案 0 :(得分:1)

根据this,Symfony在匹配时使用当前请求的HTTP方法。我猜您的控制器提供POST请求,而您的下载链接是GET。

答案 1 :(得分:1)

你可以做这样的事情获得路线名称:

public/protected/private function getRefererRoute(Request $request = null)
{
    if ($request == null)
        $request = $this->getRequest();

    //look for the referer route
    $referer = $request->headers->get('referer');
    $path = substr($referer, strpos($referer, $request->getBaseUrl()));
    $path = str_replace($request->getBaseUrl(), '', $lastPath);

    $matcher = $this->get('router')->getMatcher();
    $parameters = $matcher->match($path);
    $route = $parameters['_route'];

    return $route;
}

修改 我忘了解释我在做什么。所以基本上你得到页面网址($referer),然后用str_replace取出你网站的基本网址,然后尝试使用路由匹配器将路径的剩余部分与已知的路由模式匹配。

<强> EDIT2: 显然,如果您希望能够使用$this->get(...)

,则需要在控制器内部使用此功能

答案 2 :(得分:0)

路径名称位于_route_name对象的Request属性中:$request->attributes->get('_route_name')

答案 3 :(得分:0)

也许有点晚了,但是当我面对同样的问题时,我遇到的是类似的东西

$request = Request::create($targetPath, Request::METHOD_GET, [], [], [], $_SERVER);

try {
    $matches = $router->matchRequest($request);
} catch (\Exception $e) {
    // throw a 400
}

关键部分是使用$_SERVER超全局数组以便立即设置所有内容。