0

使用routes.php它很容易地創建使用前綴不同語言的路徑,例如,我們可以創建一個關於頁面的路線about,並使用pl/o-nas網址相同的路線:路線 - 通過自定義變量和翻譯

if (\Request::segment(1) =='pl') { 
    $prefix ='pl'; 
    \App::setLocale('pl'); 
} 
else{ 
    $prefix =''; 
    \App::setLocale('en'); 
} 

Route::group(
    array('prefix' => $prefix, 
    function() { 
     Route::any('/'.trans('routes.about'), '[email protected]'); 
    } 
); 

但是,正如我們所知,默認情況下Laravel 5使用註釋。使用註釋可以達到相同的效果嗎?目前有大約在Laravel使用註釋沒有多少信息5.

您可以先添加到RouteServiceProverbefore方法類似代碼:

if (\Request::segment(1) =='en') { 
    $routePrefix =''; 
    $this->app->setLocale('en'); 
} 
else{ 
    $routePrefix ='pl'; 
    $this->app->setLocale('pl'); 
} 

但我們如何使用這個前綴和翻譯​​註解本身以及如何在這裏使用trans函數?它應該是這樣的,但它顯然不會工作,因爲你不能簡單地把函數放入註釋中,我不知道是否有任何方法在這裏添加前綴。

/** 
* @Get("/trans('routes.about')") 
* @prefix: {$prefix} 
*/ 
public function about() 
{ 
    return "about page"; 
} 
+1

您是否可以使用中間件解析任何語言需求的路由 - 並在中間件中將其設置到控制器之前? – Laurence 2014-10-20 09:57:15

+0

@TheShiftExchange也許我可以但在這一刻我不知道該怎麼做 – 2014-10-20 10:00:34

回答

0

像這樣的東西應該工作:

<?php namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Contracts\Routing\Middleware; 

class LangDetection implements Middleware { 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if ($request->segment(1) =='en') { 
       $this->app->setLocale('en'); 
     } 
     else{ 
       $this->app->setLocale('pl'); 
     } 

     return $next($request); 
    } 

} 

然後確保是在每次調用運行 - 把它放到應用中間件堆棧(應用程序/供應商/ AppServiceProvider.php):

protected $stack = [ 
    'App\Http\Middleware\LangDetection', 
    'Illuminate\Cookie\Middleware\Guard', 
    'Illuminate\Cookie\Middleware\Queue', 
    'Illuminate\Session\Middleware\Reader', 
    'Illuminate\Session\Middleware\Writer', 
]; 

編輯:或者您不必將其放入堆棧,您可以將其保留爲「中間件過濾器」並在特定路由上調用它 - 與您對'auth','csrf'等已經做的相同

+0

問題是,這個中間件也應該修改請求(從url中刪除前綴),並且還要轉換路徑到正確的控制器(現在如果我有url'pl/o-nas'這個中間件會正確設置語言,但它仍然會查找'pl/o-nas'註釋而不是'about') – 2014-10-20 11:09:02

+0

你可以在你的中間件中創建一個新的$ request對象, - 然後將它傳遞給'$ next($ request)'。如果中間件運行在主堆棧中,它會在*確定要運行哪條路徑之前發生*,因此它會選擇正確的控制器 – Laurence 2014-10-20 11:12:13

+0

請問您可以如何根據當前url輕鬆地更改$ request URL /創建新的請求對象?我以前沒有做過,我不知道我該怎麼做。我不知道我是否應該創建新的請求或克隆當前的並且以某種方式編輯url以確保Request也有方法(POST/GET /)和其他必要的數據。 – 2014-10-21 13:29:08