2014-10-31 61 views
1

我有以locale爲前綴的url,我想保存本地並修改請求而不重定向它,如何在傳遞請求之前修改請求?如何在Laravel 5 Middleware中創建新的請求

因此,對於像site.com/en/someurl一個URL

class GetLocale implements Middleware { 
public function handle($request, Closure $next) 
{ 
    $segment = Request::segment(1); // 'en' 
    if(is_valid_language($segment)){ 
     // remove local from the request url 
     // do something to remove the local and continue 
     // as if the url was site.com/someurl 
     return $next($request); 
    } 

    return $next($request); 
} 

} 

的getLocale運行後,該網站的其餘部分應完全忽視了語言環境和看到的只是site.com/someurl。

(這是所以我們可以在同一時間使用的語言環境和路線註解,仍然保持原來的報頭,POST數據等)**

回答

2

的Laravel請求類有一個duplicate()方法,它允許您創建重複的請求並覆蓋它的某些部分

底層Symfony請求會檢查服務器變量和標頭,以確定prepareRequestUri()上的請求URL。

似乎覆蓋請求上的REQUEST_URI服務器變量($serverduplicate()方法)應該可以幫助您重寫沒有區域設置片段的URL。然而,這似乎是一個非常劈十歲上下的解決方案


參考:https://github.com/laravel/framework/blob/master/src/Illuminate/Http/Request.php#L613