2017-11-19 13 views
0

모든 URL에 위치를 추가해야합니다.laravel에서 세그먼트의 수가 여러 개인 경우 RouteGroup에서 미들웨어가 실행되지 않음

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

그러나 세그먼트의 수는 하나 이상있는 경우, 미들웨어가 실행되지 않습니다 :이 같은 "RouteServiceProvider.php"에서 "mapWebRoutes"를 사용했다. 예를 들어 위치가 아래 주소에 올바르게 추가되었습니다. 미들웨어 =>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'); 
     }); 
    } 
}