2014-10-31 2 views
1

로컬로 접두어가 붙은 URL이 있습니다. 로컬을 저장하고 리디렉션하지 않고 요청을 수정하려면 요청을 전달하기 전에 어떻게 수정해야합니까?Laravel 5 미들웨어에서 새 요청을 만들려면 어떻게해야합니까?

그래서 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을 확인합니다.

요청시 $server (duplicate() 메서드의 경우) 서버 변수를 재정의하면 로캘 조각을 사용하지 않고 URL을 다시 작성하는 데 도움이됩니다. 그러나 이것은 매우 해킹 틱 솔루션처럼 보인다


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

관련 문제