일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- invalid_grant
- 코멘토 #코멘토실무PT #실무PT후기 #실무강의 #리액트강의 #웹프로그래밍 #react #웹개발실무
- 모던 자바스크립트
- 자바스크립트
- 프론트엔드
- TypeORM
- redis
- 프로그래머스
- 우아한 테크코스
- Dev-Matching
- 음악 url 파일 다운로드
- 딥다이브
- Deep Dive
- compateto
- AWS
- concurrency limit
- oauth
- this
- bucket4j
- api 비동기처리
- 우아한테크코스
- 검색
- 스프링부트
- 타입스크립트
- api 요청 수 제한
- 파일 url
- 유효시간 설정 url
- 프리코스
- 프론트엔드 과제
- NestJS
- Today
- Total
개발 알다가도 모르겠네요
Laravel Controller 본문
리퀘스트 처리에 관한 논리는 라우트 파일에서 클로저로 정의 할 수 있지만, "컨트롤러" 클래스를 사용하여 같은 동작을 설정할 수 있다.
기본적으로 컨트롤러 클래스 파일은 app/Http/Controllers 디렉토리에 저장된다.
기본 Controller
컨트롤러는 Laravel에 포함된 기본 컨트롤러 클래스를 확장한다. 기본 컨트롤러 클래스는 App\Http\Controllers\Controller 경로에 위치한다.
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\User;
class UserController extends Controller
{
/**
* Show the profile for a given user.
*
* @param int $id
* @return \Illuminate\View\View
*/
public function show($id)
{
return view('user.profile', [
'user' => User::findOrFail($id)
]);
}
}
다음과 같이 라우트에서는 컨트롤러 메서드에 대한 경로를 정의할 수 있다.
use App\Http\Controllers\UserController;
Route::get('/user/{id}', [UserController::class, 'show']);
들어오는 요청이 지정된 라우트의 URI와 일치하면 App\Http\Controllers\UserController 클래스의 show 메소드가 호출되고 라우트의 파라미터가 show 메소드에 전달된다.
컨트롤러는 기본 컨트롤러 클래스를 필수로 상속 받지 않아도 작동하지만, 기본 컨트롤러 클래스를 상속하지 않는다면
middleware 및 authorize 메서드와 같은 편리한 기능을 사용하기 위한 접근을 할 수 없다.
Controller Middleware
미들웨어는 다음과 같이 컨트롤러 라우트에 지정할 수 있다.
Route::get('profile', [UserController::class, 'show'])->middleware('auth');
또는 컨트롤러의 생성자 내에서 middleware 메서드를 사용하여 컨트롤러의 엑션에 미들웨어를 할당할 수 있다.
class UserController extends Controller
{
/**
* Instantiate a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('log')->only('index');
$this->middleware('subscribed')->except('store');
}
}
의존성 주입 & 컨트롤러
생성자 주입
라라벨의 서비스 컨테이너는 모든 라라벨 컨트롤러의 의존성을 해결하기 위해서 사용된다. 그 결과 컨트롤러가 필요로 하는 의존 객체들에 대해서 생성자에서 타입힌트로 지정할 수 있게 되고, 의존성은 자동으로 해결되어 컨트롤러 인스턴스에 주입된다.
<?php
namespace App\Http\Controllers;
use App\Repositories\UserRepository;
class UserController extends Controller
{
/**
* The user repository instance.
*/
protected $users;
/**
* Create a new controller instance.
*
* @param \App\Repositories\UserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
$this->users = $users;
}
}
메소드 인젝션
생성자 주입 외에도 컨트롤러의 메소드에 대한 유형 힌트 종속성을 사용할 수도 있다. 메소드 주입의 일반적인 사용 사례는 Illuminate\Http\Request 인스턴스를 컨트롤러 메소드에 주입하는 것이다.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Store a new user.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$name = $request->name;
//
}
}
컨트롤러의 메소드가 라우트 파라메터의 전달도 고려해야 하는 경우, 의존성 주입 파라메터 다음에 라우터 파라메터를 나열한다.
예를 들어 경로가 다음과 같이 정의된 경우
use App\Http\Controllers\UserController;
Route::put('/user/{id}', [UserController::class, 'update']);
다음과 같은 코드를 통해 동일하게 타입힌트로 지정된 Illuminate\Http\Request 의존성 주입 대상과 컨트롤러 메소드에 정의된 id 파라메터에 접근할 수 있다.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Update the given user.
*
* @param \Illuminate\Http\Request $request
* @param string $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
}
'웹 > Laravel' 카테고리의 다른 글
Laravel에서 Social OAuth 2.0 구현하기 (0) | 2023.06.01 |
---|---|
Laravel Sail을 알아보자 (0) | 2023.03.14 |
Laravel 파일 구조와 라우팅 (0) | 2023.03.13 |
Windows에서 Laravel 도커 실행시 오류 문제 해결 (0) | 2023.03.08 |