Form GET không gọi được method trong Controller
Xin chào mọi người, Hiện tại, mình đang làm một project cá nhân. Trong project mình có chức năng ghi lại Log Release của một user.
Trong chức năng này, có các chức năng phụ đó là search Log
,show Log
theo một ID.
Theo logic là khi nhập thông tin vào form search thì sẽ gọi tới route: Route::get('search-log')
, và hàm Search() trong Controller của mình sẽ xử lí và lấy ra được danh sách log theo keyword đã nhập.
Mình đã test bằng cách gọi hàm dd() trong hàm Search() ở Controller để kiểm tra xem hàm Search() có hoạt động không.
Vấn đề mình gặp phải đó là nếu để thứ tự Route như sau thì khi submit form search, hàm Search() trong Controller không chạy được mặc dù đã truyền đúng các route.
// Route log-release
Route::group(['prefix' => 'log-release'], function () {
Route::get('/', [App\Http\Controllers\LogRelease\LogReleaseController::class, 'getLogReleaseList'])->name('Version Deploy.Deploy index.Show Log Release');
Route::get('/{user_id}', [App\Http\Controllers\LogRelease\LogReleaseController::class, 'getLogReleaseByUserId'])->name('Version Deploy.Deploy index.Show Log Release By User Id');
Route::get('search-log',[App\Http\Controllers\LogRelease\LogReleaseController::class,'searchLogRelease'])->name('Version Deploy.Deploy index.Search LogRelease');
});
Nhưng khi đổi thứ tự Route như hình 2 thì hàm Search() lại hoạt động.
// Route log-release
Route::group(['prefix' => 'log-release'], function () {
Route::get('/', [App\Http\Controllers\LogRelease\LogReleaseController::class, 'getLogReleaseList'])->name('Version Deploy.Deploy index.Show Log Release');
Route::get('search-log',[App\Http\Controllers\LogRelease\LogReleaseController::class,'searchLogRelease'])->name('Version Deploy.Deploy index.Search LogRelease');
Route::get('/{user_id}', [App\Http\Controllers\LogRelease\LogReleaseController::class, 'getLogReleaseByUserId'])->name('Version Deploy.Deploy index.Show Log Release By User Id');
});
Và form search của mình ở view: Mong được mọi người giúp đỡ.
2 CÂU TRẢ LỜI
Trường hợp của bạn là 2 route (search và show) đang có cùng cấu trúc link, nên phải luôn để các route không có tham số lên trước các route có tham số nha bạn. Nếu không nó sẽ map sai và hiểu nhầm "search-log" là id của route '/{user_id}'
Mình đã hiểu, cảm ơn bạn rất nhiều.
Thứ tự code như kia không ảnh hưởng gì đến flow data đâu bạn, bạn nên xem lại phần name của route cho đúng quy chuẩn (viết thường, không cách, sử dụng quy tắc snake_case hoặc camelCase). Sau đó bạn nên xem lại đến phần gọi tên route, mình thấy phần gọi route của bạn đang quá loằng ngoằng, nhìn không hiểu gì hết
Cảm ơn bạn, Route name của mình loằng ngoằng là do yêu cầu của project, nó chỉ là route name nên không ảnh hưởng gì cả. Khi mình kiểm tra thì route vẫn hoạt động đúng, nhưng chỉ có điều là không vào được hàm Search trong Controller thôi