목차
- 문자열 리턴
- 뷰 리턴
- HTTP 메소드 대응 라우트
- 라우트에서 파라미터 제어
- 라우트의 이름 지정
- 라우트 매칭 실패시 대체 라우트 정의
- 라우트의 그룹 및 공통경로설정
- 서명 라우트
- 컨트롤러
문자열 리턴
Route::get('/hi', function () {
return '안녕하세요.';
});
뷰 리턴
뷰 파일이 없으면 에러 발생
디버그모드 설정(.env 파일)이 false면 500에러, true면 에러의 상세정보 출력
<!-- resources/view/Myview.blade.php -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MyView</title>
</head>
<body>
<h1>MyView!!!</h1>
</body>
</html>
Route::get('/myview', function () {
return view('myview');
});
HTTP 메소드 대응 라우트
여러 라우트에 해당될 경우 가장 마지막에 정의된 것이 실행
// Home
Route::get('/home', function() {
return view('home');
});
// GET 요청에 대한 처리
Route::get('/method', function() {
return 'GET Method!!';
});
// POST 요청에 대한 처리
Route::post('/method', function() {
return 'POST Method!!';
});
<!-- resources/view/home.blade.php -->
<form action="/method" method="POST">
<!-- @csrf : 라라벨의 CSRF(Cross-Site Request Forgery) 보호를 위한 토큰을 출력하는
라라벨 블레이드 템플릿의 지시문,
토큰은 폼 제출 시 보안을 강화하기 위해 사용됨 -->
@csrf
@method('PUT')
<button type="submit">PUT</button>
</form>
// PUT 요청에 대한 처리
Route::put('/method', function() {
return 'PUT Method!!';
});
<form action="/method" method="POST">
@csrf
@method('DELETE')
<button type="submit">DELETE</button>
</form>
// DELETE 요청에 대한 처리
Route::delete('/method', function() {
return 'DELETE Method!!';
});
// 모든 요청에 대한 처리 (중복되는 처리를 하지않도록 주의)
Route::any('/method', function() {
return 'ANY Method!!';
});
// 지정한 특정 메소드 요청에 대한 처리
Route::match(['get', 'post'], '/method', function() {
return 'MATCH Method!!';
});
라우트에서 파라미터 제어
use Illuminate\Http\Request;
Route::get('/query', function(Request $request) {
return $request->id.", ".$request->name;
});
// URL 세그먼트로 지정 파라미터 획득
// 세그먼트가 없을경우 404 ERROR
// http://localhost/segment/1로 GET 요청을 보내면 1이라는 값이 $id 변수에 할당됨
Route::get('/segment/{id}', function($id) {
return 'segment ID : '.$id;
});
// URL 세그먼트로 지정 파라미터 획득 : 기본값 설정(404 ERROR 안뜨게)
Route::get('/segment2/{id?}', function($id = 'base') {
return 'segment2 ID : '.$id;
});
// Request로도 세그먼트 파라미터 획득 가능, 세그먼트 파라미터가 없어도 404 ERROR 발생 안함
Route::get('/segment2/{id?}', function(Request $request) {
return 'segment2 ID : '.$request->id;
});
라우트의 이름 지정
<a href="{{route('names.index');}}">names</a>
// 사용법 : <a href="{{route('names.index');}}">names</a>
Route::get('/names', function() {
return 'name.index !!!';
})->name('names.index');
라우트 매칭 실패시 대체 라우트 정의
Route::fallback(function() {
return '잘못된 경로로 접속하셨습니다.';
});
라우트의 그룹 및 공통경로설정
// 공통 경로 : prefix('공통 경로 이름')->group();
// Route::prefix('users')->group()은 /users를 공통 경로로 지정하고 해당 그룹 내에서 라우트를 정의하는 것을 의미함
// 이렇게 공통 경로를 지정하면, 그룹 내의 각 라우트는 /users 접두사를 가져야 함
// ex) localhost/users/login, localhost/users/logout, ...
Route::prefix('users')->group(function() {
Route::get('/login', function() {
return 'Login!!';
})->name('users.login');
Route::get('/logout', function() {
return 'Logout!!';
})->name('users.logout');
Route::get('/registration', function() {
return 'Registration!!';
})->name('users.registration');
});
서명 라우트
use Illuminate\Support\Facades\URL;
Route::get('/makesign', function() {
// 일반적인 URL 링크 생성하기
$baseUrl = route('sign');
// 서명된 URL 링크 생성하기
$signUrl = URL::signedRoute('sign');
// 유효기간이 있는 서명된 URL 링크 생성하기
$limitSignUrl = URL::temporarySignedRoute('sign', now()->addSecond(10));
return $baseUrl . '<br><br>' . $signUrl . '<br><br>' . $limitSignUrl . '<br><br><a href="' . $limitSignUrl . '">유효기간이 있는 서명된 URL</a>';
});
Route::get('/sign', function() {
return 'Sign!!';
})->name('sign')->middleware('signed');
컨트롤러
// 커맨드(cmd, powershell)로 컨트롤러 생성 : php artisan make:controller TestController
use App\Http\Controllers\TestController;
Route::get('/test', [TestController::class, 'index'])->name('tests.index');
// 커맨드(cmd, powershell)로 컨트롤러 생성 : php artisan make:controller TasksController --resource
use App\Http\Controllers\TasksController;
Route::resource('/tasks', TasksController::class);
Github
'Laravel > Laravel_ex' 카테고리의 다른 글
seeders(database/seeders), factories(database/factories) (0) | 2023.05.27 |
---|---|
migrations(database/migrations) (0) | 2023.05.27 |
블레이드 템플릿(resources/views) (0) | 2023.05.24 |
Laravel (0) | 2023.05.23 |