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,“/”); }