将URL与Symfony中的路由匹配

将URL与Symfony中的路由匹配,symfony,url-routing,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输出:\u route\u name获取任何子域.domain.{tld}

我们在身份验证后面有文件,如果用户使用文件的URL和HTML资源的URL输入应用程序,我想为身份验证后重定向做不同的事情

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

app/console router:debug
输出:
\u route\u name获取任何子域.domain.{tld}/resource/{id2}/identifiers/{id2}/here/{id3}/download


Symfony有一个路由组件(),我正在尝试调用Symfony IOC提供的
Symfony\Bundle\FrameworkBundle\Routing\Router
的实例上的
match()
。我尝试了使用域和不使用域,但它们都创建了一个
方法不允许的
异常,因为找不到路由。如何将此URL与路由匹配?

路由名称可在
请求
对象的
\u route\u name
属性中找到:
$Request->attributes->get(“\u route\u name”)
根据,Symfony在匹配时使用当前请求的HTTP方法。我猜您的控制器提供POST请求,而您的下载链接是GET。

您可以执行类似操作以获取路由名称:

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;
}
编辑: 我忘了解释我在做什么。因此,基本上,您将获得页面url(
$referer
),然后使用
str\u replace
取出网站的基本url,然后尝试使用路由匹配器将路径的剩余部分与已知的路由模式相匹配

EDIT2:
显然,如果你想使用
$this->get(…)

可能有点晚,但由于我面临同样的问题,我得出的结论是

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

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

关键部分是使用
$\u服务器
超全局数组,以便立即设置所有内容。

感谢您的输入。当前请求不是我想要路由的请求。我想获取任意URL的路由。谢谢。这可能就是我最终要做的,但它不适用于不同的请求类型。