소개
Laravel은 애플리케이션의 URL을 생성하기 위한 몇 가지 헬퍼를 제공합니다. 이 헬퍼들은 템플릿이나 API 응답에서 링크를 구축할 때, 또는 애플리케이션의 다른 곳으로 리다이렉트 응답을 생성할 때 특히 편리합니다.기본 사용법
URL 생성
url 헬퍼를 사용해 임의의 URL을 생성할 수 있습니다.
생성된 URL은 애플리케이션이 처리하고 있는 현재 요청의 스킴(HTTP 또는 HTTPS)과 호스트를 자동으로 사용합니다.
query 메서드를 사용합니다.
현재 URL 가져오기
url 헬퍼에 경로를 지정하지 않는 경우, Illuminate\Routing\UrlGenerator 인스턴스가 반환되어 현재 URL에 관한 정보에 접근할 수 있습니다.
URL 파사드에서도 접근할 수 있습니다.
직전 URL 가져오기
사용자가 방문했던 직전의 URL을 알고 싶은 경우가 있습니다.url 헬퍼의 previous 메서드나 previousPath 메서드로 가져올 수 있습니다.
이름 지정 라우트의 URL
route 헬퍼는 이름 지정 라우트로의 URL을 생성하는 데 사용할 수 있습니다.
이름 지정 라우트를 사용하면 라우트에 정의된 실제 URL에 의존하지 않고 URL을 생성할 수 있습니다.
따라서 라우트의 URL이 변경되어도 route 함수의 호출을 변경할 필요가 없습니다.
Eloquent 모델
Eloquent 모델의 라우트 키(일반적으로 기본 키)를 사용해 URL을 생성하는 경우가 많을 것입니다. 그를 위해 Eloquent 모델을 파라미터 값으로 전달할 수 있습니다.route 헬퍼는 모델의 라우트 키를 자동으로 꺼냅니다.
서명된 URL
Laravel에서는 이름 지정 라우트로의 “서명된” URL을 간단하게 만들 수 있습니다. 이 URL들에는 쿼리 문자열에 “서명” 해시가 부가되어, URL이 만들어진 후 변조되지 않았는지를 Laravel이 검증할 수 있습니다. 서명된 URL은 공개적으로 접근 가능하지만 URL 조작에 대한 보호가 필요한 라우트에 특히 편리합니다. 예를 들어 고객에게 이메일로 전송하는 공개 “구독 해지” 링크를 구현하기 위해 서명된 URL을 사용할 수 있습니다.URL 파사드의 signedRoute 메서드를 사용해 서명된 URL을 만듭니다.
signedRoute 메서드에 absolute 인수를 지정함으로써 서명 URL 해시에서 도메인을 제외할 수 있습니다.
temporarySignedRoute 메서드를 사용합니다.
Laravel은 일시적 서명된 URL을 검증할 때 서명된 URL에 인코딩된 유효기간 타임스탬프가 경과하지 않았는지 확인합니다.
서명된 URL의 검증 플로우
서명된 라우트 요청의 검증
수신 요청에 유효한 서명이 있는지 확인하려면Illuminate\Http\Request 인스턴스의 hasValidSignature 메서드를 호출합니다.
hasValidSignatureWhileIgnoring 메서드를 사용합니다.
signed(Illuminate\Routing\Middleware\ValidateSignature) 미들웨어를 라우트에 할당할 수도 있습니다.
수신 요청에 유효한 서명이 없는 경우 미들웨어는 자동으로 403 HTTP 응답을 반환합니다.
relative 인수를 미들웨어에 지정합니다.
무효한 서명된 라우트로의 응답
유효 기간이 만료된 서명된 URL에 접근하면403 HTTP 상태 코드의 범용 오류 페이지가 표시됩니다.
애플리케이션의 bootstrap/app.php 파일에서 InvalidSignatureException 예외의 커스텀 “render” 클로저를 정의함으로써 이 동작을 커스터마이징할 수 있습니다.
컨트롤러 액션의 URL
action 함수는 지정된 컨트롤러 액션의 URL을 생성합니다.
플루언트 URI 객체
Laravel의 URI 클래스는 객체를 통해 URI를 생성·조작하기 위한 편리한 플루언트 인터페이스를 제공합니다.기본 URL 파라미터
특정 URL 파라미터에 요청 전체의 기본값을 지정하고 싶은 경우가 있습니다. 예를 들어 많은 라우트에{locale} 파라미터가 정의되어 있다고 합시다.
route 헬퍼를 호출할 때마다 locale을 전달하는 것은 번거롭습니다.
그래서 URL::defaults 메서드를 사용해 현재 요청 중에 항상 적용되는 이 파라미터의 기본값을 정의할 수 있습니다.
이 메서드는 라우트 미들웨어에서 호출하면 현재 요청에 접근할 수 있습니다.
locale 파라미터의 기본값이 설정되면 route 헬퍼로 URL을 생성할 때 그 값을 전달할 필요가 없어집니다.
URL 기본값의 설정은 Laravel의 암묵적 모델 바인딩 처리를 방해하는 경우가 있습니다.
URL 기본값을 설정하는 미들웨어를 Laravel 자체의
SubstituteBindings 미들웨어보다 먼저 실행되도록 미들웨어의 우선순위 설정을 해 주세요.
애플리케이션의 bootstrap/app.php 파일에서 priority 미들웨어 메서드를 사용해 설정할 수 있습니다.