我们有身份验证后面的文件,如果用户使用文件的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与路径匹配?
答案 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
超全局数组以便立即设置所有内容。