2017-11-19 9 views
0

すべてのURLに場所を追加する必要があります。私はこのような「RouteServiceProvider.php」で「mapWebRoutes」を使用:laravelセグメントの数が複数ある場合、ミドルウェアはルートグループ内で実行されません

protected function mapWebRoutes() 
{ 
    $locale = Request::segment(1); 
    Route::group([ 
     'middleware' => 'web', 
     'namespace' => $this->namespace, 
     'prefix' => $locale 
    ], function ($router) { 
     require base_path('routes/web.php'); 
    }); 
} 

しかし、セグメントの数が1以下であるとき、ミドルウェアは実行されません。 たとえば、住所が下に正しく追加されています。ミドルウェア=>http://example.com/en/test

しかし、場所から復帰後

http://example.com/testは、以下のアドレスに加算されません。

http://example.com/test1/test2

これは、ミドルウェアが実行されていないことを意味します。ミドルウェアの最初の行にecho 'test'; exit();を追加します。ミドルウェアが実行されていることを確認します。しかし、セグメントの数が複数の場合、ミドルウェアは実行されません。

マイミドルウェアのコードは次のとおりです。私は、コードの下にmapWebRoutesを()に変更し、問題がsloved

public function handle($request, Closure $next) 
{ 
    if (!array_key_exists($request->segment(1), config('translatable.locales'))) { 
     // Store segments in array 
     $segments = $request->segments(); 
     // Set the default language code as the first segment 
     $segments = array_prepend($segments, config('app.fallback_locale')); 

     // Redirect to the correct url 
     return redirect()->to(implode('/', $segments)); 
    } 
    return $next($request); 
} 

答えて

0

protected function mapWebRoutes() 
{ 
    if (!array_key_exists(Request::segment(1), config('translatable.locales'))) { 
     Route::group([ 
      'middleware' => ['web'], 
      'namespace' => $this->namespace 
     ], function ($router) { 
      require base_path('routes/web.php'); 
     }); 
    } else { 
     $locale = Request::segment(1); 
     Route::group([ 
      'middleware' => ['web'], 
      'namespace' => $this->namespace, 
      'prefix' => $locale 
     ], function ($router) { 
      require base_path('routes/web.php'); 
     }); 
    } 
} 
関連する問題