라우팅

리소스 컨트롤러

컨트롤러 생성시 라우팅에 아래의 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