我使用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,'/'); }