라라벨에서 브라우저를 통한 웹 접근용 라우트는 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::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 |
댓글