본문 바로가기
IT/PHP

Laravel - 라우트

by Sungjun_ 2020. 12. 30.

라라벨에서 브라우저를 통한 웹 접근용 라우트는 routes/web.php 파일에 정의합니다.

웹 접근용 라우트는 사용자가 방문하는 URL입니다.

 

라우트를 정의하는 간단한 방법은 익명 함수를 사용하는 것입니다.

Route::get('/', function () {
    return view('home');
});

 

이렇게 하면 누군가 도메인 루트 경로에 접속하면 화면에 views 폴더 안에 있는 home.blade.php 파일을 출력해줍니다.

(home.blade.php 파일을 만들어야 출력됩니다. Laravel 프로젝트를 만든 상태면 welcome.blade.php 파일이 있을겁니다.)

 

라라벨에서 라우트를 정의할 때 Route::get()과 같은 형식으로 정의합니다.

HTTP 요청에 따라 Route:: 뒤에 오는 것이 달라집니다.

GET

Route::get('/', function () {

//////////////

})

POST 

Route::post('/', function () {

//////////////

})

 

 

자바스크립트에서 보내는 PUT이나 DELETE도 가능합니다.

PUT

Route::put('/', function () {

//////////////

})

DELETE 

Route::delete('/', function () {

//////////////

})

 

 

그 외로 Route::any(), Route::match(['get', 'post']) 등이 있습니다.

 


위 처럼 익명 함수를 사용하는 방법 외에도 튜플 형태로 컨트롤러, 메소드 명을 전달하는 방식도 있습니다.

 

TaskController 안에 있는 index 메서드가 있을 때

Route::get('/', [TaskController::class, 'index']);

 

이런 식으로 사용자의 요청을 TaskController 안에 있는 index 메서드로 전달합니다.

 

이 때, 주의하실 점은 web.php에 TaskController를 namespace로 정의해야합니다.

물론 TaskController.php 파일도 존재해야합니다.

생성 방법은 터미널에 php artisan make:controller TaskController 이렇게 입력하시면 됩니다.

use App\Http\Controllers\TaskController

Route::get('/', [TaskController::class, 'index']);

 

이 방법 말고도

Route::get('/', 'App\Http\Controllers\TaskController@index');

 

이렇게 하면 namespace를 따로 정의하지 않고 라우트를 설정할 수 있습니다.

 


라우트를 정의할 때 URL의 세그먼트를 변수로 받고자 하면, 파라미터를 정의하고 익명 함수에 전달할 수 있습니다.

만약 어떤 게시판에서 id 값을 기준으로 글을 불러온다면

Route::get('boards/{id}', function ($id){
  ////
});

 

이런 식으로 사용할 수 있습니다.

보통 라우트 파라미터{id}와 메서드의 파라미터 $id는 동일한 이름을 사용합니다.

 


라우트에 이름을 지정해서 사용할 수 있습니다.

Route::get('/', function () {
    return view('home');
}) -> name('main');

 

-> name('////')을 사용해 이름을 지정할 수 있습니다.

 

이렇게 하면 view파일에서 url을 호출할 때 편하게 사용할 수 있습니다.

 

<a href="{{route('main')}}">홈으로</a>

 

views 폴더 안에 boards라는 디렉토리가 있고 기본적인 CRUD를 지원한다고 가정했을 때

라우트명은 관례적으로

boards.index, boards.create, boards.store, boards.show, boards.edit, boards.update, boards.destroy

이런식으로 복수형과 액션으로 결합한 형태로 구성합니다 >> route('boards.index')

 


use App\Http\Controllers\BoardController


Route::get('boards', [BoardController::class, 'index']);
Route::get('boards/create', [BoardController::class, 'create']);
Route::post('boards/{board}', [BoardController::class, 'store']);
Route::get('boards/{board}', [BoardController::class, 'show']);
Route::get('boards/{board}/edit', [BoardController::class, 'date']);
Route::delete('boards/{board}', [BoardController::class, 'destroy']);

 

현재 boards라는 접두사가 중복됩니다.

이럴 때는 prefix를 사용해서 라우트를 그룹으로 묶을 수 있습니다.

Route::prefix('boards') -> group(function (){
    Route::get('/', [BoardController::class, 'index']);
    Route::get('create', [BoardController::class, 'create']);
    Route::post('{board}', [BoardController::class, 'store']);
    Route::get('{board}', [BoardController::class, 'show']);
    Route::get('{board}/edit', [BoardController::class, 'edit']);
    Route::put('{board}', [BoardController::class, 'update']);
    Route::delete('{board}', [BoardController::class, 'destroy']);
});

 

 

위 같이 라라벨의 관례를 따른다면 아래처럼 간단하게 표현 가능합니다.

라라벨의 관례를 따르는 컨트롤러 생성방법은 

php artisan make:controller BoardController --resource 입니다.

Route::resource('boards', BoardController::class);

 

php artisan route:list << 이렇게 입력하면 어떤 라우트가 정의되어 있는지 확인할 수 있습니다.

 

route:list

 


마지막으로 라우트를 정의할 때 리다이렉트도 사용할 수 있습니다.

 

Route::get('/', function (){
   return redirect('home'); 
});

Route::get('/', function (){
   return redirect() -> to('home'); 
});

 

이렇게 사용하면 특정 url로 접속시킬 수 있습니다.

 

라우트 네임을 사용해 리다이렉트 시키고 싶다면

Route::get('/', function (){
   return redirect() -> route('main'); 
});

 

route()를 사용하고 안에는 라우트 이름을 넣어주면됩니다.

 

이전 방문한 페이지로 보내고 싶다면 back()을 사용하면 됩니다.

Route::get('/', function (){
   return redirect() -> back(); 
});

 

 

 

 

 

 

 

 

라라벨8이 나오면서 이전에 작성했던 CRUD 글을 수정해야 되네요..

빠른 시일안에 라라벨8 기준 CRUD 글을 작성해야겠습니다.

'IT > PHP' 카테고리의 다른 글

Laravel 8 - CRUD(2)  (0) 2021.01.04
Laravel 8 - CRUD(1)  (0) 2021.01.04
Laravel - 회원 정보 수정  (2) 2020.12.14
Laravel - 구글 소셜 로그인(4)  (2) 2020.12.13
Laravel - 구글 소셜 로그인(3)  (0) 2020.12.13

댓글