Asked Jul 13th, 2018 2:26 AM 118 0 3
  • 118 0 3
+2

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

Share
  • 118 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'=>'[email protected]'
])->middleware('auth','role');

Route::patch('/matches/{id}',[
    'as'=>'match.unhidden',
    'uses'=>'[email protected]'
])->middleware('auth','role');

Route::patch('/matches/{id}',[
    'as'=>'match.update',
    'uses'=>'[email protected]'
])->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 ANSWERS


Answered Jul 13th, 2018 2:48 AM
Accepted
+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 😄

Share
Hoàng Đức Quân @devil_boom_129
Jul 13th, 2018 2:51 AM

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

0
| Reply
Share
Tran Duc Thang @thangtd90
Jul 13th, 2018 2:57 AM

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

0
| Reply
Share
Answered Jul 13th, 2018 9:22 AM
+1
  1. [email protected] => Chưa có method này
  2. 3 route cùng url lẫn method
Share
Answered Jul 30th, 2018 6:15 AM
+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.

Share