使用Symfony2中的特定方案生成绝对URL

Soc*_*cce 10 php symfony

我想在Symfony2控制器中生成具有特定方案(https)的绝对URL.我发现的所有解决方案都指向我配置目标路由,以便它需要该方案.但我需要在http中保持可访问的路由,因此我无法将其设置为要求https(在这种情况下,http请求被重定向到相应的https URL).

有没有办法生成一个URL,在该URL生成的范围内,只有一个特定的方案?

我看到使用该'network'关键字生成一个"网络路径"样式的URL,看起来像"//example.com/dir/file"; 也许我可以干脆做

'https:' . $this->generateUrl($routeName, $parameters, 'network')
Run Code Online (Sandbox Code Playgroud)

但我不知道这对于任何路由或请求上下文是否足够健壮.

更新:在URL生成代码调查之后,这种"网络路径"解决方案看起来非常强大.网络路径与绝对URL完全相同,没有"//"之前的方案.

Bas*_*sit 6

最好的办法

$url = 'https:'.$this->generateUrl($routeName, $parameters, UrlGeneratorInterface::NETWORK_PATH)
Run Code Online (Sandbox Code Playgroud)


Fra*_*eni 5

根据代码或文档,目前您无法在generateUrl方法中执行此操作。所以你的“hackish”解决方案仍然是最好的,但正如@RaymondNijland评论的那样,你最好这样做str_replace

$url = str_replace('http:', 'https:', $this->generateUrl($routeName, $parameters));
Run Code Online (Sandbox Code Playgroud)

如果你想确保它只在字符串的开头改变,你可以写:

$url = preg_replace('/^http:/', 'https:', $this->generateUrl($routeName, $parameters));
Run Code Online (Sandbox Code Playgroud)

不,冒号 ( :) 在正则表达式中没有特殊含义,因此您不必转义它。