컨트롤러 내에서 작업 수행 후 특정 view페이지를 보여주거나, 현재 페이지를 벗어나서 다른 페이지로 리디렉션 시키고자 할 때가 있다. 이 때 각각 view() 와 redirect() 헬퍼함수를 호출하여 사용한다.
redirect()와 view() 두 헬퍼함수는 용도가 전혀 다르지만, 뷰페이지가 바뀌는 점은 같으므로 언제 어떻게 사용해야될지 살짝 헷갈릴 수 있다.
결론부터 말하면, redirect()는 uri를 변경시키는 함수다. 그러므로 사용자의 인증과 인가에 관련되어 해당 요청이 실패했을 때 uri를 변경시켜 사용자를 현재 페이지에서 벗어나게끔 할 때 사용한다.
반면에 view()는 특정 uri 요청이 들어왔을 때, 특정 view페이지를 반환해서 화면에 띄워주고 싶을 때 사용한다. 인증과 인가
먼저, view() 헬퍼함수에 대해 알아보자.
view()는 resouces/views 안에 있는 blade파일의 위치를 첫번 째 파라미터로 전달받아, 해당 blade파일을 렌더링하여 보여주는 함수다.
단순히 뷰페이지만 보여주는 용도라면 라우팅된 컨트롤러의 메소드 안에서 아래와 같이 함수를 사용하면 된다.
public function edit(Qnaboard $qna)
{
return view('qnas.edit', compact('qna'));
}
다음으로, redirect() 헬퍼함수에 대해 알아보자.
redirect()는 아래와 같이 route()를 메서드 체이닝 시켜 자주 사용한다.
return redirect()->route('qnas.index');
view 헬퍼함수는 말 그대로 view페이지를 반환하기 위해 사용하는 함수이다. 클라이언트가 /login 이라는 uri를 입력하면, 해당 uri에 라우팅된 컨트롤러의 메소드나 클로저 내에서 로그인화면을 반환하고자 할 때 사용한다.
반면에, redirect()는 uri을 변경시키는 용도로 사용한다. 로그인한 사용자 또는 특정 등급 이상의 사용자만 게시글을 볼 수 있는 회원제 게시판이 있다고 가정하자. 이 때, 사용자가 인증과 인가 절차에 실패했을 때. 즉, 권한이 없는 사용자가 접근 했을 때 return view('login'); 과 같은 형태로 로그인페이지를 띄우는 것은 REST API 원칙에도 어긋나며, 또 다시 로그인 작업을 코드로 중복되게 작성해야하는 등 적절하지 않은 방법이다.
부가적으로, redirect() 는 리다이렉트이므로 당연히 http 상태코드 301를 반환하지만, view()는 정상코드인 200을 반환하는 차이점이 있다.
'Laravel' 카테고리의 다른 글
[Laravel] 라라벨 블레이드 템플릿 문법 기초 (0) | 2021.11.23 |
---|