Yêu cầu thg 7 13, 2018 2:26 SA 176 0 3
  • 176 0 3
+2

Các hàm bị đè lẫn nhau trong Laravel

Chia sẻ
  • 176 0 3

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


Đã trả lời thg 7 13, 2018 2:48 SA
Đã được chấp nhận
+2

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 😄

Chia sẻ
Avatar Hoàng Đức Quân @devil_boom_129
thg 7 13, 2018 2:51 SA

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 ạ?

Avatar Tran Duc Thang @thangtd90
thg 7 13, 2018 2:57 SA

@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 😄

Đã trả lời thg 7 13, 2018 9:22 SA
+1
  1. MatchController@unhidden => Chưa có method này
  2. 3 route cùng url lẫn method
Chia sẻ
Đã trả lời thg 7 30, 2018 6:15 SA
+1

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.

Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí