리소스 컨트롤러
컨트롤러 생성시 라우팅에 아래의 7개의 액션을 추가해서 생성해준다
php artisan make:controller PhotoController --resource
php artisan make:controller PhotoController --model=Photo --resource // 모델까지 맵핑
php artisan make:controller PhotoController --model=Photo --resource --requests // 모델이랑 폼리퀘스트까지 맵핑
라우트 모델 바인딩 (묵시적 바인딩)
아래의 예시에서 라우터의 {user}과 컨트롤러의 $user부분이 같은 이름인 경우,
라라벨은 자동으로 $user로 넘어온 id값을 가진 모델인스턴스를 주입한다
// 라우터
Route::get('/users/{user}', [UserController::class, 'show']);
// 컨트롤러
public function show(User $user)
{
return view('user.profile', ['user' => $user]);
}
생성자/메서드 의존성 주입
서비스컨테이너가 컨트롤러에 의존성을 주입해준다. 필요한 객체들에 대해서 타입힌트로 지정가능함
아래의 예제는 생성자에 주입하는 예제(1,2)와 메서드에 주입하는 예제(3,4)
class UserController extends Controller
{
/**
* Create a new controller instance.
*
* @param \App\Repositories\UserRepository $users // 1.이 부분에 타입힌트 지정
* @return void
*/
public function __construct(UserRepository $users) // 2.그러면 이 부분에 객체주입가능
{
$this->users = $users;
}
/**
* Update the given user. // Route::put('/user/{id}', [UserController::class, 'update']);
*
* @param \Illuminate\Http\Request $request // 3. 이 부분에 타입힌트 지정
* @param string $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id) // 4.객체주입
{
//
}
}
라우트 생성시 주의할점
라우팅 경로가 중첩될 경우 404에러가 발생하는 경우가있음
고정된 url의 라우팅(/posts/create)을 먼저 읽어 들인다음
동적이 url라우팅을 등록해야함 (/posts/{post})
// 에러
Route::get('/posts/{post}', [PostController::class, 'show'])->name('post.show');
Route::get('/posts/create', [PostController::class, 'create'])->name('post.create');
// 문제없음
Route::get('/posts/create', [PostController::class, 'create'])->name('post.create');
Route::get('/posts/{post}', [PostController::class, 'show'])->name('post.show');
Route()함수와 View()함수로 화면에 데이터 전달
view('user.profile', ['user' => $user]);
route('profile', ['id' => 1]);
참조
https://laravel.kr/docs/9.x/routing#%EB%AC%B5%EC%8B%9C%EC%A0%81%20%EB%B0%94%EC%9D%B8%EB%94%A9
Jul 9, 2023
Views 118