2017-01-26 11 views
1

Laravel 5.3アプリケーションでローカリゼーションを作成しています。それは、このような要件に従わなければならない:Laravelのルートアクションからルートプレフィックスを削除する方法

  1. ルート・パスは、ロケール接頭辞が含まれている場合は、ロケールが何のルートプレフィクスがありません場合は、それが英語に設定する必要があります。この接頭辞

  2. に応じて設定する必要があります。

    例えば

A)mysite.org/pl/blog/133セットはplにロケールと)パラメータ113

CとBlogController mysite.org/en/blog/133セットenにロケール)113

BパラメータでBlogControllerを呼び出し、呼び出しmysite.org/blog/133は以前と同じように動作します。

これを実装するために、私は次のコードを使用していました:

#routes/web.php 

require base_path('routes/common.php'); 
// TODO set default locale to en 

Route::group(['prefix' => '{locale}'], function($group) { 

    require base_path('routes/common.php'); 
    // TODO set locale to $locale 

    foreach ($group -> getRoutes() as $route) { 
     $route->where('locale', 'en|ru|pl|ua|de'); 
    } 

}); 


#routes/common.php 

Route::get('/blog/{id}', function($id) { 
    // Return view of respective blogpost 
}); 

問題は、私はパスAまたはBを使用する場合、私は、ロケールプレフィックスから派生した、私のアクション機能、中に余分な最初のパラメータを取得するということです。

どういうわけかこのパラメータを非表示にすることはできますか?それとも、構造的に正しい方法で私が望むものを達成する方法はありますか?

答えて

0

私は私の解決策は 最善かそうでないかわからないが、あなたはアプリ/ HTTP/Middileware/Language.php

に新しいファイルを作成するには、この

  1. を試すことができます...

    namespace App\Http\Middleware; 
    
    use Closure; 
    use Illuminate\Routing\Redirector; 
    use Illuminate\Http\Request; 
    
    class Language { 
    
        public function __construct(Redirector $redirector) { 
         // $this->app = $app; 
         $this->redirector = $redirector; 
         // $this->request = $request; 
        } 
    
        /** 
        * Handle an incoming request. 
        * 
        * @param \Illuminate\Http\Request $request 
        * @param \Closure $next 
        * @return mixed 
        */ 
        public function handle($request, Closure $next) 
        { 
         // Make sure current locale exists. 
         $segments = $request->segments(); 
         $locale = $segments[0]; 
    
         $languages = ['en','ru','pl','ua','de']; 
         if (!in_array($locale, $languages)) { 
          $segments = array_merge(['en'], $segments); 
          return $this->redirector->to(implode('/', $segments)); 
         } 
    
         return $next($request); 
        } 
    
    } 
    
    アプリで
  2. /HTTP/Kernel.phpこのライン

    保護$ミドルウェア= [ミドルウェア\言語::クラス照らす\財団\ \アプリケーション\のHttp \ \のHttpミドルウェア\ CheckForMaintenanceMode ::クラス、\

    ]。ファイルのルート(ルート/ web.php)グループにプレフィックスを追加で

  3. ルート::グループ([ 'ミドルウェア' => 'ウェブ']、 'プレフィックス' => '{ロケール} ]、関数(){

.....

・ホープ、このヘルプ

+0

おかげで、私が探していたまさに、返信用の。私は実際にMcamara/LaravelLocalizationでこれを実現しました –

関連する問題