我使用URL::to
调用来在外发邮件消息中嵌入链接。当我这样做时,我得到的是类似于:“baseroot/public/index.php/xxx/yyy
”。url ::到(xxx/yyy)根据上下文返回不同的结果
然而,当我进行同样的呼叫时,例如在route
呼叫中,我得到“baseroute/xxx/yyy
”。
有什么想法?
我使用URL::to
调用来在外发邮件消息中嵌入链接。当我这样做时,我得到的是类似于:“baseroot/public/index.php/xxx/yyy
”。url ::到(xxx/yyy)根据上下文返回不同的结果
然而,当我进行同样的呼叫时,例如在route
呼叫中,我得到“baseroute/xxx/yyy
”。
有什么想法?
的URL::to
源驻留在 http://laravel.com/api/source-class-Illuminate.Routing.UrlGenerator.html#76-98
(从http://laravel.com/api/class-Illuminate.Routing.UrlGenerator.html链接)。
我建议你添加调试打印到你的副本,看看什么值$this->getScheme()
和$this->getRootPath()
良率。这些必定是差异的根源,显然是由不同的this
对象造成的。
我有一个非常类似的问题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
访问someurl与不正确的情况下。Symfony\Component\HttpFoundation\Request
(在vendor \ symfony \ http-foundation \ Symfony \ Component \ HttpFoundation \ Request.php中)。其getBaseUrl()
调用prepareBaseUrl()
,并且最终执行比较requestUri和baseUrl的实际逻辑。对于少数考古学家还在下面,在我的情况下$baseUrl
是/MyApp/public/index.php而$requestUri
是/ MYAPP /公/ someurl,这导致可悲的代码不能满足这个条件:
if($ baseUrl & & false!== $ prefix = $ this-> getUrlencodedPrefix($ requestUri,dirname($ baseUrl))){ return rtrim($ prefix,'/'); }