Laravel 파일 구조와 라우팅
라라벨은 Docker을 사용하여 라라벨 프로젝트를 실행하기 위한 기본 제공 솔루션인 Sail을 제공.
Sail은 사전 Docker 경험 없이도 PHP, MySQL 및 Redis를 사용하여 라라벨 애플리케이션을 구축할 수 있는 좋은 출발점을 제공.
가장 먼저 라라벨로 만든 웹 사이트의 URL을 결정하는 라우터부터 수정해보자.
라라벨의 라우터는 최상위 디렉토리 아래에 있는 routes/web.php 파일이 우리가 수정할 대상이다.
이 파일에 아래 소스코드를 복사하여 붙여넣으면, 이후에 웹 브라우저에서 /hello/world 경로로 접속하면 "Hello World"라는 문구가 표시되는 것을 볼 수 있다.
Route::get('/hello/world', function () {
return 'Hello World';
});
먼저 이 코드는 Route라는 객체의 정적 메서드(static method)인 get()을 부르고 있다.
Route는 라라벨에서 제공하는 객체이고, get()은 이름 그대로 GET 방식으로 들어온 요청을 처리하는 메서드이다.
이 메서드는 첫 번째 인자에 담긴 경로로 사용자가 접속할 경우, 두 번째 인자로 받은 클로저(closure, 익명함수) 안의 소스코드를 실행한다. 이 때 return으로 반환하는 문자열은 그대로 응답으로 출력됩니다. 이러한 과정을 거쳐 위 코드는 사용자가 GET 방식으로 /hello/world 경로에 접근했을 때, "Hello World"라는 문구를 출력하는 것이다.
Route::get('/hello/world', function () {
return '<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<title>My first Laravel web page</title>
</head>
<body>
<b>Hello World</b>
</body>
</html>
';
});
라라벨의 라우터에는, 경로에 들어간 특정한 부분을 변수로 컨트롤러에 전달할 수 있는 특별한 기능이 있다.
이것을 라우트 파라미터라고 부르는데, 라우트 파라미터를 설정하기 위해서는, 라우터의 경로에 중괄호 {}로 감싼 부분을 넣어주면 된다.
아래의 예제를 살펴보면, 라우터의 경로에 {var}라고 하는 부분이 보이는데, 이것이 라우트 파라미터이다.
그리고 이 라우터에 연결된 HelloController의 anyone 메서드에는, 인자로 $var라는 문자열 변수가 들어있는 것을 볼 수 있다.
이 소스코드를 읽은 라라벨은 /hello/ 경로 뒤에 있는 값을 anyone 메서드의 $var 인자에 담아줄 것이다.
Route::get('/hello/{var}', [HelloController::class, 'anyone']
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class HelloController extends Controller
{
public function anyone(string $var)
{
return 'Hello ' . $var . ' on ' . date('m, d, Y') . '!';
}
}
RouteServiceProvider
라우트, 로그, 이벤트같은 것을 등록할 때 라라벨 서비스 컨테이너가 처리하는데,
여기서 라우트에 대한 서비스 프로바이더가 RouteServiceProvider.