Các hàm bị đè lẫn nhau trong Laravel
Các anh cho em hỏi với ạ.
Em có các Route sau:
Route::patch('/matches/{id}',[
'as'=>'match.updatescore',
'uses'=>'MatchController@updatescore'
])->middleware('auth','role');
Route::patch('/matches/{id}',[
'as'=>'match.unhidden',
'uses'=>'MatchController@unhidden'
])->middleware('auth','role');
Route::patch('/matches/{id}',[
'as'=>'match.update',
'uses'=>'MatchController@update'
])->middleware('auth','role');
Tuy nhiên thì khi em truyền vào code thì luôn nhận được thông báo Not Define route như thế này
Làm thế nào để em có thể cho cả 3 route cùng hoạt động được ạ. Đây là link git ạ: https://trn-git.altplus.vn/int-quanhd/Gryqhon_World_Cup_Betting
3 CÂU TRẢ LỜI
Cái này
Route::patch('/matches/{id}', ...);
Route::patch('/matches/{id}', ...);
Route::patch('/matches/{id}', ...);
đương nhiên là không được rồi em =))
Em cứ thử tượng tưởng đơn giản như thế này: nếu phía client (browser) submit một request với method là PATCH
vào địa chỉ /matches/1
, thì phần backend biết điều hướng request đó cho controller nào xử lý
Một là em phải thay đổi HTTP method, hai là phải thay đổi URL thôi
vậy giờ em chỉ để 1 cái PATCH
để update thông tin trận đấu, còn chuyển hết ghi tỉ số và public trận đấu thành PUT
là được đúng không ạ?
@devil_boom_129 Đổi PATCH
thành PUT
có thể giải quyết được vấn đề với 1 controller, tuy nhiên đó không phải là cách giải quyết bản chất của vấn đề em ạ
Em nên đổi URL thì hơn.
Ví dụ như việc update thông tin về trận đấu thì có thể là /matches/{id}
, còn update về score
thì có thể là /matches/{id}/score
chẳng hạn
A nghĩ có thể có các cách sau:
-
Cách 1: giữ nguyên 3 route nhưng đổi uri route cho mỗi phương thức.
-
Cách 2: chỉ cần 1 route nhưng truyền thêm một param là action=update/unhidden/updateScore... rồi trong hàm update đó switch case
-
Cách 3: nếu không có update phức tạp thì trong hàm update dùng
$a->update($request->only([...]));
là đc rồi.