라우팅 지도
routes/web.php는 zenoBlog의 URL 지도입니다.
브라우저가 어떤 주소로 들어오면 어떤 컨트롤러가 실행될지 여기서 정합니다.
공개 페이지 라우트
| URL | 메서드 | 실행 코드 | 역할 |
|---|---|---|---|
/ | GET | PostController@index | 메인 글 목록 |
/posts | GET | PostController@index | 글 목록 |
/categories/{slug} | GET | PostController@category | 카테고리별 글 목록 |
/posts/{slug} | GET | PostController@show | 글 상세 |
/와 /posts는 같은 목록 화면을 보여줍니다.
Route::get('/', [PostController::class, 'index']);
Route::get('/posts', [PostController::class, 'index']);
카테고리 라우트
Route::get('/categories/{slug}', [PostController::class, 'category'])
->name('categories.show');
여기서 ->name('categories.show')는 라우트에 별명을 붙이는 것입니다.
Blade에서 이렇게 사용할 수 있습니다.
route('categories.show', $category->slug)
URL을 직접 문자열로 쓰는 것보다 라우트 이름을 쓰면 유지보수가 쉽습니다.
글 상세 라우트
Route::get('/posts/{slug}', [PostController::class, 'show']);
예를 들어 URL이 이렇다면:
/posts/laravel-route-controller
show() 함수의 $slug 값은 이렇게 됩니다.
laravel-route-controller
로그인 후 대시보드
Route::get('/dashboard', function () {
return redirect('/');
})->middleware(['auth', 'verified'])->name('dashboard');
Breeze 기본 구조에는 /dashboard가 있지만, zenoBlog에서는 로그인 후 메인 페이지로 돌려보냅니다.
프로필 라우트
Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});
이 그룹 안의 URL은 로그인한 사용자만 접근할 수 있습니다.
관리자 라우트
Route::middleware(['auth', \App\Http\Middleware\IsAdmin::class])
->prefix('admin')
->name('admin.')
->group(function () {
Route::resource('posts', \App\Http\Controllers\Admin\PostController::class);
Route::resource('categories', \App\Http\Controllers\Admin\CategoryController::class)
->only(['index', 'store', 'update', 'destroy']);
});
여기에는 중요한 설정이 세 개 있습니다.
| 코드 | 의미 |
|---|---|
middleware(['auth', IsAdmin::class]) | 로그인 + 관리자만 접근 |
prefix('admin') | URL 앞에 /admin 붙이기 |
name('admin.') | 라우트 이름 앞에 admin. 붙이기 |
이미지 업로드 라우트
Route::middleware(['auth', \App\Http\Middleware\IsAdmin::class])
->post('/admin/upload-image', [ImageController::class, 'upload'])
->name('admin.upload-image');
TipTap 에디터에서 이미지를 올릴 때 이 URL로 POST 요청을 보냅니다.
관리자만 이미지를 업로드할 수 있습니다.
인증 라우트 불러오기
require __DIR__.'/auth.php';
이 한 줄로 로그인, 회원가입, 로그아웃, 비밀번호 재설정 라우트가 들어옵니다.
이 파일들은 Laravel Breeze가 만들어준 기본 인증 구조입니다.