Laravel 4 url::to(xxx/yyy)根据上下文返回不同的结果
我正在使用Laravel 4 url::to(xxx/yyy)根据上下文返回不同的结果,laravel-4,Laravel 4,我正在使用URL::to调用在发送的邮件消息中嵌入链接。当我这样做时,我得到的是类似于:“baseroot/public/index.php/xxx/yyy” 然而,当我做相同的调用时,例如,在路由调用中,我得到“基本路由/xxx/yyy” 有什么想法吗?URL::to的源代码位于 (链接至) 我建议您将调试打印添加到副本中,并查看哪些值$this->getScheme()和$this->getRootPath()yield。这些肯定是差异的根源,显然是由不同的对象造成的。我遇到了一个非常类似
URL::to
调用在发送的邮件消息中嵌入链接。当我这样做时,我得到的是类似于:“baseroot/public/index.php/xxx/yyy
”
然而,当我做相同的调用时,例如,在路由
调用中,我得到“基本路由/xxx/yyy
”
有什么想法吗?URL::to的源代码位于 (链接至)
我建议您将调试打印添加到副本中,并查看哪些值
$this->getScheme()
和$this->getRootPath()
yield。这些肯定是差异的根源,显然是由不同的对象造成的。我遇到了一个非常类似的问题,即URL::to('user/123')
在访问主页和其他页面时返回的值不正确。经过一些调查,在我的案例中,请求url中的大小写敏感度(!)是一个问题。我希望这与你的神秘案件有关
关于我的案例的更多信息:URL:to('user/123')
无论我访问http://localhost/
MyApp
/public/someurl
或http://localhost/
Myapp
/public/someurl
。在前者中,它给出了正确的结果http://localhost/MyApp/public/user/123
,而后者给出了错误的http://localhost/user/123
从这里,我的调查中不太重要的注释,给未来的拉拉维尔考古学家。我希望我不是在胡说八道。我对Laravel是新手,在Windows机器上使用本地Laravel 4安装+WAMP
UrlGenerator
的to()
方法使用$root=$this->getRootUrl($scheme)代码>。后者使用$this->request->root()代码>,其中请求为\Symfony\Component\HttpFoundation\request
Request::root()
确实默认为错误的值,例如http://localhost
访问带有不正确大小写的URL时
- 罪魁祸首是
Symfony\Component\HttpFoundation\Request
(在vendor\Symfony\http foundation\Symfony\Component\HttpFoundation\Request.php中)。它的getBaseUrl()
调用prepareBaseUrl()
,并最终执行将requestUri与baseUrl进行比较的实际逻辑
- 对于仍在关注的少数考古学家来说,在我的例子中,
$baseUrl
是/MyApp/public/index.php,$requestUri
是/MyApp/public/someurl,这不幸地导致代码不满足这个条件:
if($baseUrl&&false!=$prefix=$this->getUrlencodedPrefix($requestUri,dirname($baseUrl))){
返回rtrim($prefix,“/”);
}