본문으로 건너뛰기

라우팅 지도

routes/web.php는 zenoBlog의 URL 지도입니다.
브라우저가 어떤 주소로 들어오면 어떤 컨트롤러가 실행될지 여기서 정합니다.

공개 페이지 라우트

URL메서드실행 코드역할
/GETPostController@index메인 글 목록
/postsGETPostController@index글 목록
/categories/{slug}GETPostController@category카테고리별 글 목록
/posts/{slug}GETPostController@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가 만들어준 기본 인증 구조입니다.