컨트롤러란
라우트 파일에 모든 요청 처리 로직을 클로저로 정의하는 대신, “컨트롤러” 클래스를 사용해 이 동작을 정리할 수 있습니다. 컨트롤러는 관련된 요청 처리 로직을 하나의 클래스로 모을 수 있습니다. 예를 들어UserController 클래스는 사용자의 표시·생성·갱신·삭제 등 사용자에 관한 모든 수신 요청을 처리할 수 있습니다.
기본적으로 컨트롤러는 app/Http/Controllers 디렉터리에 저장됩니다.
컨트롤러 생성
새 컨트롤러를 빠르게 생성하려면make:controller Artisan 명령을 사용합니다.
애플리케이션의 모든 컨트롤러는 기본적으로 app/Http/Controllers 디렉터리에 저장됩니다.
기본 컨트롤러
컨트롤러 클래스는 수신하는 HTTP 요청에 응답하는 여러 public 메서드를 가질 수 있습니다.App\Http\Controllers\UserController 클래스의 show 메서드가 호출되고, 라우트 파라미터가 메서드로 전달됩니다.
컨트롤러는 베이스 클래스를 상속할 필요는 없습니다. 다만 모든 컨트롤러에서 공유해야 할 메서드를 가진 베이스 컨트롤러 클래스를 상속하면 편리한 경우가 있습니다.
싱글 액션 컨트롤러
컨트롤러의 액션이 특히 복잡한 경우, 컨트롤러 클래스 전체를 그 단일 액션에 전념시키면 편리합니다. 이를 실현하려면 컨트롤러 안에 단일__invoke 메서드를 정의합니다.
make:controller Artisan 명령의 --invokable 옵션을 사용해 호출 가능한 컨트롤러를 생성할 수 있습니다.
리소스 컨트롤러
애플리케이션 내의 각 Eloquent 모델을 “리소스”라고 생각하면, 각 리소스에 대해 동일한 조작 세트(CRUD)를 실행하는 것이 일반적입니다. Laravel의 리소스 라우팅은 전형적인 생성·읽기·갱신·삭제(CRUD) 라우트를 한 줄의 코드로 컨트롤러에 할당합니다.make:controller Artisan 명령의 --resource 옵션을 사용해 이 액션들을 처리하는 컨트롤러를 빠르게 생성할 수 있습니다.
app/Http/Controllers/PhotoController.php에 컨트롤러를 생성합니다.
컨트롤러에는 사용 가능한 각 리소스 조작의 메서드가 스텁으로 포함됩니다.
다음으로 컨트롤러를 가리키는 리소스 라우트를 등록합니다.
php artisan route:list 명령을 실행하면 애플리케이션 라우트의 개요를 빠르게 확인할 수 있습니다.부분적 리소스 라우트
리소스 라우트를 선언할 때 컨트롤러가 처리해야 할 액션의 서브셋을 지정할 수 있습니다.API 리소스 라우트
API에서 사용하는 리소스 라우트를 선언하는 경우,create나 edit 같이 HTML 템플릿을 표시하는 라우트를 제외하고 싶은 경우가 많습니다.
apiResource 메서드를 사용하면 이 두 라우트를 자동으로 제외할 수 있습니다.
미들웨어 어트리뷰트
PHP 어트리뷰트를 사용해 컨트롤러에 미들웨어를 할당할 수도 있습니다.의존성 주입
생성자 주입
Laravel의 서비스 컨테이너는 모든 Laravel 컨트롤러의 의존 해결에 사용됩니다. 따라서 컨트롤러의 생성자에 컨트롤러가 필요로 하는 의존을 타입 힌트로 지정할 수 있습니다. 선언된 의존은 자동으로 해결되어 컨트롤러 인스턴스에 주입됩니다.메서드 주입
생성자 주입에 더해 컨트롤러의 메서드의 의존도 타입 힌트로 지정할 수 있습니다. 메서드 주입의 일반적인 유스케이스는Illuminate\Http\Request 인스턴스를 컨트롤러 메서드에 주입하는 것입니다.
Illuminate\Http\Request를 타입 힌트하면서 id 파라미터에도 접근할 수 있습니다.
다음 단계
라우팅
라우트 정의 방법과 컨트롤러와의 연동을 되짚어 봅니다.