php7.4
Laravel 8 환경에서
게시판을 만들어보던 중
web.php 파일
...
Route::group(['as' => 'boards', 'prefix' => 'boards', 'middleware' => 'auth'], static function () {
Route::get('/', [BoardController::class, 'index'])->name('.index');
Route::get('/oldest', [BoardController::class, 'oldest'])->name('.oldest');
Route::get('/create-page', [BoardController::class, 'create_page'])->name('.create_page');
Route::post('/store', [BoardController::class, 'store'])->name('.store');
Route::get('/{board}', [BoardController::class, 'detail_page'])->name('.detail_page');
Route::get('/{board}/edit-page', [BoardController::class, 'edit_page'])->name('.edit_page');
Route::patch('/{board}', [BoardController::class, 'update'])->name('.update');
Route::delete('/{board}', [BoardController::class, 'destroy'])->name('.destroy');
Route::get('/{board}/verify-page', [BoardController::class, 'verify_page'])->name('.verify_page');
Route::get('/{board}/verify', [BoardController::class, 'verify'])->name('.verify');
Route::get('/search', [BoardController::class, 'search'])->name('.search');
});
과 같이 작성을 했다.
그런데 검색기능을 추가한 후 테스트를 위하여
http://localhost:8000/boards/search?keyword=123 과 같이 검색을 진행해보니
404 에러가 발생하였다.
라우트 캐시 초기화도 해보고 이런저런 방법을 써도 다 안됐다...
임시로 group 밖에 작성해보니 이거는 또 된다...
web.php 파일
...
Route::group(['as' => 'boards', 'prefix' => 'boards', 'middleware' => 'auth'], static function () {
Route::get('/', [BoardController::class, 'index'])->name('.index');
Route::get('/oldest', [BoardController::class, 'oldest'])->name('.oldest');
Route::get('/create-page', [BoardController::class, 'create_page'])->name('.create_page');
Route::post('/store', [BoardController::class, 'store'])->name('.store');
Route::get('/{board}', [BoardController::class, 'detail_page'])->name('.detail_page');
Route::get('/{board}/edit-page', [BoardController::class, 'edit_page'])->name('.edit_page');
Route::patch('/{board}', [BoardController::class, 'update'])->name('.update');
Route::delete('/{board}', [BoardController::class, 'destroy'])->name('.destroy');
Route::get('/{board}/verify-page', [BoardController::class, 'verify_page'])->name('.verify_page');
Route::get('/{board}/verify', [BoardController::class, 'verify'])->name('.verify');
// Route::get('/search', [BoardController::class, 'search'])->name('.search');
});
Route::get('/search', [BoardController::class, 'search'])->name('search');
http://localhost:8000/search?keyword=123 주소로 접속해보니 잘 됨...
원인은 다음과 같았다.
라우트는 작성한 순서대로 위에서 아래로 읽는다.
이름이 같은 라우트가 있으면 해당 라우트를 우선 실행시키게 된다.
그런데 내가 작성한 라우트 중에서 /boards/search 메서드와 비슷한게 있다..
바로 get메서드 /boards/{board} 이다.
내가 {board}의 타입을 지정해주지 않았으므로
/boards/search 에서 search가 {board}의 일종으로 인식된 것이다.
{board} 는 board의 id가 들어오는 부분이므로 타입을 숫자로 지정해줘서 문제를 해결하자
...
Route::get('/{board}', [BoardController::class, 'detail_page'])->where('board','[0-9]+')->name('.detail_page');
...
라라벨에서 라우트를 지정하는 방식이 스프링과 달라서 새로운 공부가 되었다.
'공부 일지 > 개인 공부 기록용' 카테고리의 다른 글
세상은 넓고.. (0) | 2024.01.18 |
---|---|
[JAVA] 이미지 리사이징, 썸네일 (1) | 2023.11.27 |
에러로그 laravel 클론코딩 (0) | 2023.06.09 |
[JPA] N+1 문제 (0) | 2023.05.22 |
에러로그 (mysqladmin flush-hosts) (0) | 2023.05.19 |