[Laravel] Request
Request
request는 전송된 데이타를 받는 역활을 한다.
기본적인 형태
public function store(Request $request)
{
$name = $request->input('name');
}
기본적인 형태에서의 변화
기본적인 입력에서 아래처럼 몇가지 경우로 사용가능한다.
public function store(Request $request)
{
$name = $request->input('name'); // 1. 기본적인 방식
$name = $request->name; // 2. 1 과 동일한 결과
$name = $request->input('name', 'pondol'); // 3. 초기 값이 없을 경우 초기값 지정
}
추가 입력 병합
위의 3번의 경우 $name에 request를 받아 없으면 초기값을 입력했다.
blade에서 request로 값을 받는 경우가 있는데 이때는 request->name 자체에 초기값을 입력해야 합니다.
$name = $request->input('name', 'pondol');
$request->merge(['name' => $name]);
위의 경우는 아래와 같이 한줄로도 표현가능하다.
$request->mergeIfMissing(['name' => 'pondol']);
위처럼 처리하면 blade에서 그대로 받아서 초기값을 사용해도 된다.
<input type="text" name="name" value="{{request()->get('name')}}">
입력값을 세션에 임시 저장하기
$request->flash();
$request->flashOnly(['username', 'email']);
$request->flashExcept('password');
Request 에서 쿠키 조회하기
$value = $request->cookie('name');
이전 입력값 조회
old 메서드를 통해서 이전 입력값을 조회할 수 있다.
$username = $request->old('username');
<input type="text" name="username" value="{{ old('username') }}">
default 값도 아래처럼 넣을 수 있다.
<input type="text" name="username" value="{{ old('username', 'defaultValue') }}">
<input type="text" name="username" value="{{ old('username', $user->name) }}">
배열은 아래처럼 처리 가능하다.
<input type="text" name="options[{{$item->id}}]" value="{{ old('options.'.$item->id, 'defaultValue') }}">
Router 파라미터 받기
기본적으로 request는 get, post등에 입력된 값을 받게 되는데 라우터를 통해서 전해지는 값을 처리하는 방법에 대해 설명드리겠습니다.
예제 1
단순히 파라미터 값만 전달받기
route
Route::get('/user/{id}', ...);
public function store(Request $request, $id)
{
}
예제 2
db를 조회해서 바로 결과 값을 받을 수도 있다.
use use App\Models\User;
public function store(Request $request, User $id)
{
// $id는 단순 숫자나 string이 아니라 User 정보가 매칭된다.
}
파일 처리하기
업로드된 파일 조회하기
$file = $request->file('photo');
$file = $request->photo;
파일경로 및 확장자 구하기
$path = $request->photo->path();
$extension = $request->photo->extension();
업로드된 파일 저장하기
$path = $request->photo->store('images');
$path = $request->photo->store('images', 's3'); // 파일이 저장되는데 사용될 디스크 이름을 두 번째 선택 인자로 허용합니다
$path = $request->photo->storeAs('images', 'filename.jpg');
$path = $request->photo->storeAs('images', 'filename.jpg', 's3');
기타 다양한 Request
Request 경로 조회하기
$uri = $request->path();
// http://example.com/foo/bar 를 대상으로 한다면 path 메소드는 foo/bar를 반환합니다
Request URI 조회하기
$url = $request->url(); // 쿼리 스트링 없는 URL
$urlWithQueryString = $request->fullUrl(); // 쿼리 스트링을 포함한 URL
Request 헤더
$value = $request->header('X-Header-Name');
$value = $request->header('X-Header-Name', 'default');
$token = $request->bearerToken(); // Authorization 헤더에서 bearer 토큰을 검색하기
Request IP 주소
$ipAddress = $request->ip();