Liên kết ẩn của Laravel không hoạt động

Nếu bạn đang chuyển tham số vào tuyến đường thì đó không thể là yêu cầu POST, nó có định dạng được gọi là mã hóa url

Nếu bạn không biết về nó, chỉ cần sử dụng bất kỳ từ khóa nào thay vì đăng và để laravel đặt nó thành thích hợp, hãy kiểm tra các phương thức định tuyến thủ công đầu tiên

sử dụng phương pháp

Route::redirect('/here', '/there');

12 như thế này,

Route::any('users/{user}/folders/{folder}', 'FileController@listUserFolder');

Tôi hy vọng nó sẽ giúp

Các route cơ bản nhất của Laravel chấp nhận một URI và một bao đóng, cung cấp một phương pháp xác định route và hành vi rất đơn giản và rõ ràng mà không cần các tệp cấu hình định tuyến phức tạp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

Tệp định tuyến mặc định

Tất cả các route của Laravel được xác định trong các tệp route của bạn, nằm trong thư mục

Route::redirect('/here', '/there');

1. Các tệp này được tải tự động bởi

Route::redirect('/here', '/there');

2 của ứng dụng của bạn. Tệp

Route::redirect('/here', '/there');

3 xác định các tuyến dành cho giao diện web của bạn. Các tuyến này được chỉ định nhóm phần mềm trung gian

Route::redirect('/here', '/there');

4, cung cấp các tính năng như trạng thái phiên và bảo vệ CSRF. Các route trong

Route::redirect('/here', '/there');

5 không trạng thái và được chỉ định nhóm phần mềm trung gian

Route::redirect('/here', '/there');

6

Đối với hầu hết các ứng dụng, bạn sẽ bắt đầu bằng cách xác định các tuyến đường trong tệp

Route::redirect('/here', '/there');

3 của mình. Có thể truy cập các tuyến đường được xác định trong

Route::redirect('/here', '/there');

3 bằng cách nhập URL của tuyến đường đã xác định vào trình duyệt của bạn. Ví dụ: bạn có thể truy cập tuyến đường sau bằng cách điều hướng đến

Route::redirect('/here', '/there');

9 trong trình duyệt của mình

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

1

Các tuyến đường được xác định trong tệp

Route::redirect('/here', '/there');

5 được lồng trong một nhóm tuyến đường bởi

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

31. Trong nhóm này, tiền tố URI

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

32 được tự động áp dụng, do đó bạn không cần phải áp dụng nó theo cách thủ công cho mọi tuyến đường trong tệp. Bạn có thể sửa đổi tiền tố và các tùy chọn nhóm tuyến đường khác bằng cách sửa đổi lớp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

31 của bạn

Các phương thức bộ định tuyến khả dụng

Bộ định tuyến cho phép bạn đăng ký các tuyến đáp ứng với bất kỳ động từ HTTP nào

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

6

Đôi khi bạn có thể cần phải đăng ký một tuyến đường đáp ứng nhiều động từ HTTP. Bạn có thể làm như vậy bằng cách sử dụng phương pháp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

34. Hoặc, bạn thậm chí có thể đăng ký một tuyến đáp ứng tất cả các động từ HTTP bằng cách sử dụng phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

35

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

9

Lưu ý
Khi xác định nhiều tuyến chia sẻ cùng một URI, các tuyến sử dụng các phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

36,

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

37,

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

38,

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

39,

Route::redirect('/here', '/there');

40 và

Route::redirect('/here', '/there');

41 phải được xác định trước các tuyến sử dụng phương pháp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

35, . Điều này đảm bảo yêu cầu đến được khớp với đúng tuyến.

Tiêm phụ thuộc

Bạn có thể nhập gợi ý bất kỳ phụ thuộc nào theo yêu cầu của tuyến đường trong chữ ký gọi lại của tuyến đường của bạn. Các phụ thuộc đã khai báo sẽ tự động được giải quyết và đưa vào hàm gọi lại bởi bộ chứa dịch vụ Laravel. Ví dụ: bạn có thể nhập gợi ý lớp

Route::redirect('/here', '/there');

45 để yêu cầu HTTP hiện tại tự động được đưa vào hàm gọi lại tuyến đường của bạn

Route::redirect('/here', '/there');

0

Bảo vệ CSRF

Hãy nhớ rằng, bất kỳ biểu mẫu HTML nào trỏ đến các tuyến đường

Route::redirect('/here', '/there');

46,

Route::redirect('/here', '/there');

47,

Route::redirect('/here', '/there');

48 hoặc

Route::redirect('/here', '/there');

49 được xác định trong tệp tuyến đường

Route::redirect('/here', '/there');

4 phải bao gồm trường mã thông báo CSRF. Nếu không, yêu cầu sẽ bị từ chối. Bạn có thể đọc thêm về bảo vệ CSRF trong tài liệu CSRF

Route::redirect('/here', '/there');

6

Chuyển hướng tuyến đường

Nếu bạn đang xác định một tuyến chuyển hướng đến một URI khác, bạn có thể sử dụng phương thức

Route::redirect('/here', '/there');

71. Phương pháp này cung cấp một lối tắt thuận tiện để bạn không phải xác định tuyến đường hoặc bộ điều khiển đầy đủ để thực hiện chuyển hướng đơn giản

Route::redirect('/here', '/there');

Theo mặc định,

Route::redirect('/here', '/there');

71 trả về mã trạng thái

Route::redirect('/here', '/there');

73. Bạn có thể tùy chỉnh mã trạng thái bằng tham số thứ ba tùy chọn

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

3

Hoặc, bạn có thể sử dụng phương thức

Route::redirect('/here', '/there');

74 để trả về mã trạng thái

Route::redirect('/here', '/there');

75

Route::redirect('/here', '/there');

4

Cảnh báo
Khi sử dụng tham số tuyến đường trong tuyến đường chuyển hướng, các tham số sau được bảo lưu bởi Laravel và không thể sử dụng được.

Route::redirect('/here', '/there');

76 và

Route::redirect('/here', '/there');

77.

Xem các tuyến đường

Nếu tuyến đường của bạn chỉ cần trả về một chế độ xem, bạn có thể sử dụng phương thức

Route::redirect('/here', '/there');

78. Giống như phương pháp

Route::redirect('/here', '/there');

44, phương pháp này cung cấp một lối tắt đơn giản để bạn không phải xác định một tuyến đường hoặc bộ điều khiển đầy đủ. Phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

100 chấp nhận URI làm đối số đầu tiên và tên chế độ xem làm đối số thứ hai. Ngoài ra, bạn có thể cung cấp một mảng dữ liệu để chuyển đến dạng xem dưới dạng đối số thứ ba tùy chọn

Route::redirect('/here', '/there');

7

Cảnh báo
Khi sử dụng tham số tuyến đường trong chế độ xem tuyến đường, các tham số sau được Laravel bảo lưu và không thể sử dụng được.

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

100,

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

102,

Route::redirect('/here', '/there');

77 và

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

104.

Danh sách tuyến đường

Lệnh

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

105 Artisan có thể dễ dàng cung cấp tổng quan về tất cả các tuyến đường được xác định bởi ứng dụng của bạn

Theo mặc định, phần mềm trung gian định tuyến được gán cho từng tuyến sẽ không được hiển thị trong đầu ra

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

105;

Bạn cũng có thể hướng dẫn Laravel chỉ hiển thị các tuyến đường bắt đầu bằng một URI nhất định

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

10

Ngoài ra, bạn có thể hướng dẫn Laravel ẩn bất kỳ route nào được xác định bởi các gói của bên thứ ba bằng cách cung cấp tùy chọn

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

108 khi thực hiện lệnh

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

105

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

11

Tương tự như vậy, bạn cũng có thể hướng dẫn Laravel chỉ hiển thị các route được xác định bởi các gói của bên thứ ba bằng cách cung cấp tùy chọn

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

110 khi thực hiện lệnh

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

105

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

12

Tham số tuyến đường

Thông số bắt buộc

Đôi khi bạn sẽ cần nắm bắt các phân đoạn của URI trong tuyến đường của mình. Ví dụ: bạn có thể cần lấy ID của người dùng từ URL. Bạn có thể làm như vậy bằng cách xác định tham số tuyến đường

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

13

Bạn có thể xác định bao nhiêu tham số tuyến đường theo yêu cầu của tuyến đường của bạn

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

14

Các tham số định tuyến luôn được đặt trong _______ 1112 dấu ngoặc nhọn và phải bao gồm các ký tự chữ cái. Dấu gạch dưới (

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

113) cũng được chấp nhận trong tên tham số tuyến đường. Các tham số tuyến đường được đưa vào các cuộc gọi lại/bộ điều khiển tuyến đường dựa trên thứ tự của chúng - tên của các đối số bộ điều khiển/gọi lại tuyến đường không quan trọng

Tham số & Tiêm phụ thuộc

Nếu route của bạn có các phụ thuộc mà bạn muốn bộ chứa dịch vụ Laravel tự động đưa vào hàm gọi lại của route, bạn nên liệt kê các tham số route sau các phụ thuộc của mình

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

15

Thông số tùy chọn

Đôi khi, bạn có thể cần chỉ định tham số tuyến đường có thể không phải lúc nào cũng có trong URI. Bạn có thể làm như vậy bằng cách đánh dấu

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

114 sau tên tham số. Đảm bảo cung cấp giá trị mặc định cho biến tương ứng của tuyến đường

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

16

Ràng buộc biểu thức chính quy

Bạn có thể hạn chế định dạng của các tham số tuyến đường của mình bằng cách sử dụng phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

115 trên một thể hiện tuyến đường. Phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

115 chấp nhận tên của tham số và một biểu thức chính quy xác định cách ràng buộc tham số

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

17

Để thuận tiện, một số mẫu biểu thức chính quy thường được sử dụng có các phương thức trợ giúp cho phép bạn nhanh chóng thêm các ràng buộc mẫu vào các tuyến đường của mình

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

18

Nếu yêu cầu đến không khớp với các ràng buộc mẫu định tuyến, phản hồi HTTP 404 sẽ được trả về

Ràng buộc toàn cầu

Nếu bạn muốn một tham số định tuyến luôn bị ràng buộc bởi một biểu thức chính quy nhất định, bạn có thể sử dụng phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

117. Bạn nên xác định các mẫu này trong phương pháp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

118 của lớp

Route::redirect('/here', '/there');

2 của bạn

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

19

Khi mẫu đã được xác định, nó sẽ tự động được áp dụng cho tất cả các tuyến sử dụng tên tham số đó

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

60

Dấu gạch chéo được mã hóa

Thành phần định tuyến của Laravel cho phép tất cả các ký tự ngoại trừ

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

120 có mặt trong các giá trị tham số tuyến đường. Bạn phải cho phép rõ ràng

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

120 là một phần của trình giữ chỗ của bạn bằng cách sử dụng biểu thức chính quy điều kiện

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

115

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

61

Cảnh báo
Dấu gạch chéo lên phía trước được mã hóa chỉ được hỗ trợ trong đoạn tuyến đường cuối cùng.

Tuyến đường được đặt tên

Các tuyến được đặt tên cho phép tạo URL hoặc chuyển hướng thuận tiện cho các tuyến cụ thể. Bạn có thể chỉ định tên cho tuyến đường bằng cách xâu chuỗi phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

123 vào định nghĩa tuyến đường

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

62

Bạn cũng có thể chỉ định tên tuyến đường cho các hành động của bộ điều khiển

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

63

Cảnh báo
Tên tuyến đường phải luôn là duy nhất.

Tạo URL cho các tuyến đường được đặt tên

Sau khi bạn đã gán tên cho một route nhất định, bạn có thể sử dụng tên của route khi tạo URL hoặc chuyển hướng thông qua các hàm trợ giúp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

124 và

Route::redirect('/here', '/there');

44 của Laravel

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

64

Nếu tuyến đường được đặt tên xác định tham số, bạn có thể chuyển tham số làm đối số thứ hai cho hàm

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

124. Các tham số đã cho sẽ tự động được chèn vào URL được tạo ở đúng vị trí của chúng

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

65

Nếu bạn truyền thêm tham số vào mảng, các cặp khóa/giá trị đó sẽ tự động được thêm vào chuỗi truy vấn của URL được tạo

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

66

Lưu ý
Đôi khi, bạn có thể muốn chỉ định các giá trị mặc định trên toàn bộ yêu cầu cho các tham số URL, chẳng hạn như ngôn ngữ hiện tại. Để thực hiện điều này, bạn có thể sử dụng.

Kiểm tra tuyến đường hiện tại

Nếu bạn muốn xác định xem yêu cầu hiện tại có được định tuyến đến một tuyến đường đã đặt tên hay không, bạn có thể sử dụng phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

128 trên một phiên bản Tuyến đường. Ví dụ: bạn có thể kiểm tra tên tuyến đường hiện tại từ phần mềm trung gian tuyến đường

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

67

Nhóm tuyến đường

Các nhóm tuyến đường cho phép bạn chia sẻ các thuộc tính tuyến đường, chẳng hạn như phần mềm trung gian, trên một số lượng lớn các tuyến đường mà không cần xác định các thuộc tính đó trên từng tuyến đường riêng lẻ

Các nhóm lồng nhau cố gắng "hợp nhất" các thuộc tính với nhóm mẹ của chúng một cách thông minh. Điều kiện Middleware và

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

115 được hợp nhất trong khi tên và tiền tố được thêm vào. Dấu phân cách không gian tên và dấu gạch chéo trong tiền tố URI được tự động thêm vào khi thích hợp

Phần mềm trung gian

Để gán phần mềm trung gian cho tất cả các tuyến trong một nhóm, bạn có thể sử dụng phương pháp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

130 trước khi xác định nhóm. Phần mềm trung gian được thực thi theo thứ tự chúng được liệt kê trong mảng

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

68

Bộ điều khiển

Nếu một nhóm các tuyến đều sử dụng cùng một bộ điều khiển, bạn có thể sử dụng phương pháp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

131 để xác định bộ điều khiển chung cho tất cả các tuyến trong nhóm. Sau đó, khi xác định các tuyến đường, bạn chỉ cần cung cấp phương thức điều khiển mà chúng gọi

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

69

Định tuyến tên miền phụ

Các nhóm định tuyến cũng có thể được sử dụng để xử lý định tuyến tên miền phụ. Tên miền phụ có thể được chỉ định tham số tuyến đường giống như URI tuyến đường, cho phép bạn nắm bắt một phần tên miền phụ để sử dụng trong tuyến đường hoặc bộ điều khiển của mình. Tên miền phụ có thể được chỉ định bằng cách gọi phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

132 trước khi xác định nhóm

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

90

Cảnh báo
Để đảm bảo có thể truy cập các tuyến miền phụ của bạn, bạn nên đăng ký các tuyến miền phụ trước khi đăng ký các tuyến miền gốc. Điều này sẽ ngăn các tuyến tên miền gốc ghi đè lên các tuyến tên miền phụ có cùng đường dẫn URI.

Tiền tố tuyến đường

Phương pháp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

133 có thể được sử dụng để thêm tiền tố vào mỗi tuyến đường trong nhóm với một URI nhất định. Ví dụ: bạn có thể muốn thêm tiền tố vào tất cả các URI tuyến đường trong nhóm bằng

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

134

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

91

Tiền tố tên tuyến đường

Phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

123 có thể được sử dụng để thêm tiền tố vào mỗi tên tuyến đường trong nhóm bằng một chuỗi đã cho. Ví dụ: bạn có thể muốn thêm tiền tố vào tất cả các tên của tuyến đường được nhóm bằng

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

134. Chuỗi đã cho được thêm tiền tố vào tên tuyến đường chính xác như được chỉ định, vì vậy chúng tôi sẽ đảm bảo cung cấp ký tự

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

137 ở cuối trong tiền tố

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

92

Ràng buộc mô hình tuyến đường

Khi thêm ID mô hình vào hành động của tuyến đường hoặc bộ điều khiển, bạn sẽ thường truy vấn cơ sở dữ liệu để truy xuất mô hình tương ứng với ID đó. Liên kết mô hình định tuyến Laravel cung cấp một cách thuận tiện để tự động đưa các phiên bản mô hình trực tiếp vào các tuyến đường của bạn. Ví dụ: thay vì thêm ID của người dùng, bạn có thể thêm toàn bộ phiên bản mô hình

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

138 khớp với ID đã cho

Ràng buộc ngầm định

Laravel tự động giải quyết các mô hình Eloquent được xác định trong các route hoặc hành động của bộ điều khiển có tên biến gợi ý kiểu khớp với tên đoạn route. Ví dụ

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

93

Vì biến

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

139 được gợi ý kiểu là mô hình

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

140 Eloquent và tên biến khớp với phân đoạn URI

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

141, nên Laravel sẽ tự động thêm đối tượng mô hình có ID khớp với giá trị tương ứng từ URI yêu cầu. Nếu không tìm thấy phiên bản mô hình phù hợp trong cơ sở dữ liệu, phản hồi HTTP 404 sẽ tự động được tạo

Tất nhiên, ràng buộc ngầm định cũng có thể thực hiện được khi sử dụng các phương thức của bộ điều khiển. Một lần nữa, lưu ý rằng phân đoạn URI

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

141 khớp với biến

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

139 trong bộ điều khiển chứa gợi ý kiểu

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

140

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

94

Mô hình đã xóa mềm

Thông thường, liên kết mô hình ẩn sẽ không truy xuất các mô hình đã được. Tuy nhiên, bạn có thể hướng dẫn liên kết ẩn để truy xuất các mô hình này bằng cách xâu chuỗi phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

145 vào định nghĩa tuyến đường của bạn

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

93

Tùy chỉnh khóa

Đôi khi bạn có thể muốn giải quyết các mô hình Eloquent bằng cách sử dụng một cột khác với cột

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

146. Để làm như vậy, bạn có thể chỉ định cột trong định nghĩa tham số tuyến đường

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

96

Nếu bạn muốn liên kết mô hình luôn sử dụng cột cơ sở dữ liệu khác với

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

146 khi truy xuất một lớp mô hình nhất định, bạn có thể ghi đè phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

148 trên mô hình Eloquent

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

97

Khóa tùy chỉnh & phạm vi

Khi liên kết ngầm nhiều Eloquent model trong một định nghĩa route, bạn có thể muốn mở rộng phạm vi của Eloquent model thứ hai sao cho nó phải là con của Eloquent model trước đó. Ví dụ: hãy xem xét định nghĩa tuyến đường này truy xuất một bài đăng trên blog bằng sên cho một người dùng cụ thể

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

98

Khi sử dụng liên kết ẩn có khóa tùy chỉnh làm tham số định tuyến lồng nhau, Laravel sẽ tự động xác định phạm vi truy vấn để truy xuất mô hình lồng nhau bởi cha của nó bằng cách sử dụng các quy ước để đoán tên mối quan hệ trên cha. Trong trường hợp này, giả định rằng mô hình

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

138 có mối quan hệ tên là

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

150 (dạng số nhiều của tên tham số tuyến đường) có thể được sử dụng để truy xuất mô hình

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

151

Nếu muốn, bạn có thể hướng dẫn Laravel xác định phạm vi liên kết "con" ngay cả khi khóa tùy chỉnh không được cung cấp. Để làm như vậy, bạn có thể gọi phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

152 khi xác định tuyến đường của mình

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

99

Hoặc, bạn có thể hướng dẫn toàn bộ nhóm định nghĩa tuyến đường sử dụng các liên kết có phạm vi

Route::redirect('/here', '/there');

00

Tương tự, bạn có thể hướng dẫn rõ ràng Laravel không phạm vi ràng buộc bằng cách gọi phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

153

Route::redirect('/here', '/there');

01

Tùy chỉnh hành vi mô hình bị thiếu

Thông thường, phản hồi HTTP 404 sẽ được tạo nếu không tìm thấy mô hình liên kết ngầm. Tuy nhiên, bạn có thể tùy chỉnh hành vi này bằng cách gọi phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

154 khi xác định tuyến đường của mình. Phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

154 chấp nhận một bao đóng sẽ được gọi nếu không tìm thấy mô hình ràng buộc ngầm

Route::redirect('/here', '/there');

02

Liên kết ẩn Enum

PHP8. 1 giới thiệu hỗ trợ cho Enums. Để khen ngợi tính năng này, Laravel cho phép bạn gõ gợi ý một chuỗi Enum hỗ trợ trên định nghĩa tuyến đường của bạn và Laravel sẽ chỉ gọi tuyến đường nếu đoạn tuyến đường đó tương ứng với một giá trị Enum hợp lệ. Nếu không, phản hồi HTTP 404 sẽ tự động được trả về. Ví dụ: đưa ra Enum sau

Bạn có thể xác định tuyến đường sẽ chỉ được gọi nếu đoạn tuyến đường

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

156 là

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

157 hoặc

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

158. Nếu không, Laravel sẽ trả về phản hồi HTTP 404

Route::redirect('/here', '/there');

03

Ràng buộc rõ ràng

Bạn không bắt buộc phải sử dụng độ phân giải mô hình dựa trên quy ước, ẩn của Laravel để sử dụng liên kết mô hình. Bạn cũng có thể xác định rõ ràng cách các tham số định tuyến tương ứng với các mô hình. Để đăng ký một ràng buộc rõ ràng, hãy sử dụng phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

159 của bộ định tuyến để chỉ định lớp cho một tham số nhất định. Bạn nên xác định các ràng buộc mô hình rõ ràng của mình khi bắt đầu phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

118 của lớp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

31 của bạn

Route::redirect('/here', '/there');

04

Tiếp theo, xác định tuyến đường có chứa tham số

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

141

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

93

Vì chúng tôi đã ràng buộc tất cả các tham số

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

141 với mô hình

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

140, nên một thể hiện của lớp đó sẽ được đưa vào tuyến đường. Vì vậy, ví dụ, một yêu cầu tới

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

165 sẽ đưa thể hiện

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

138 từ cơ sở dữ liệu có ID là

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

167

Nếu không tìm thấy phiên bản mô hình phù hợp trong cơ sở dữ liệu, phản hồi HTTP 404 sẽ được tạo tự động

Tùy chỉnh logic độ phân giải

Nếu bạn muốn xác định logic giải quyết ràng buộc mô hình của riêng mình, bạn có thể sử dụng phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

168. Việc đóng mà bạn chuyển đến phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

169 sẽ nhận giá trị của phân đoạn URI và sẽ trả về thể hiện của lớp sẽ được đưa vào tuyến đường. Một lần nữa, việc tùy chỉnh này sẽ diễn ra theo phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

118 của ứng dụng của bạn

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

31

Route::redirect('/here', '/there');

06

Ngoài ra, bạn có thể ghi đè phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

172 trên mô hình Eloquent của mình. Phương thức này sẽ nhận giá trị của đoạn URI và sẽ trả về thể hiện của lớp sẽ được đưa vào tuyến đường

Route::redirect('/here', '/there');

07

Nếu một tuyến đường đang sử dụng, phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

173 sẽ được sử dụng để giải quyết ràng buộc con của mô hình gốc

Route::redirect('/here', '/there');

08

Tuyến dự phòng

Sử dụng phương pháp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

174, bạn có thể xác định một tuyến đường sẽ được thực hiện khi không có tuyến đường nào khác phù hợp với yêu cầu đến. Thông thường, các yêu cầu chưa được xử lý sẽ tự động hiển thị trang "404" thông qua trình xử lý ngoại lệ của ứng dụng của bạn. Tuy nhiên, vì bạn thường xác định tuyến đường

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

175 trong tệp

Route::redirect('/here', '/there');

3 của mình, nên tất cả phần mềm trung gian trong nhóm phần mềm trung gian

Route::redirect('/here', '/there');

4 sẽ áp dụng cho tuyến đường. Bạn có thể tự do thêm phần mềm trung gian bổ sung vào tuyến đường này nếu cần

Route::redirect('/here', '/there');

09

Cảnh báo
Tuyến dự phòng phải luôn là tuyến cuối cùng được đăng ký bởi ứng dụng của bạn.

Giới hạn tỷ lệ

Xác định giới hạn tỷ lệ

Laravel bao gồm các dịch vụ giới hạn tốc độ mạnh mẽ và có thể tùy chỉnh mà bạn có thể sử dụng để hạn chế lưu lượng truy cập cho một tuyến đường hoặc nhóm tuyến đường nhất định. Để bắt đầu, bạn nên xác định cấu hình bộ giới hạn tốc độ đáp ứng nhu cầu của ứng dụng của bạn. Thông thường, điều này nên được thực hiện trong phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

178 của lớp

Route::redirect('/here', '/there');

2 trong ứng dụng của bạn

Bộ giới hạn tốc độ được xác định bằng phương pháp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

181 của mặt tiền

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

180. Phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

181 chấp nhận tên bộ giới hạn tốc độ và bao đóng trả về cấu hình giới hạn sẽ áp dụng cho các tuyến đường được gán cho bộ giới hạn tốc độ. Cấu hình giới hạn là các thể hiện của lớp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

183. Lớp này chứa các phương thức "trình tạo" hữu ích để bạn có thể nhanh chóng xác định giới hạn của mình. Tên bộ giới hạn tốc độ có thể là bất kỳ chuỗi nào bạn muốn

Route::redirect('/here', '/there');

60

Nếu yêu cầu gửi đến vượt quá giới hạn tốc độ đã chỉ định, phản hồi với mã trạng thái HTTP 429 sẽ tự động được Laravel trả về. Nếu bạn muốn xác định phản hồi của riêng mình sẽ được trả về theo giới hạn tỷ lệ, bạn có thể sử dụng phương pháp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

184

Route::redirect('/here', '/there');

61

Vì các lệnh gọi lại của bộ giới hạn tốc độ nhận phiên bản yêu cầu HTTP đến, nên bạn có thể tự động xây dựng giới hạn tốc độ phù hợp dựa trên yêu cầu đến hoặc người dùng được xác thực

Route::redirect('/here', '/there');

62

Giới hạn tốc độ phân đoạn

Đôi khi bạn có thể muốn phân đoạn giới hạn tỷ lệ theo một số giá trị tùy ý. Ví dụ: bạn có thể muốn cho phép người dùng truy cập một tuyến đường nhất định 100 lần mỗi phút cho mỗi địa chỉ IP. Để thực hiện điều này, bạn có thể sử dụng phương pháp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

185 khi xây dựng giới hạn tỷ lệ của mình

Route::redirect('/here', '/there');

63

Để minh họa tính năng này bằng một ví dụ khác, chúng tôi có thể giới hạn quyền truy cập vào tuyến đường ở mức 100 lần mỗi phút cho mỗi ID người dùng được xác thực hoặc 10 lần mỗi phút cho mỗi địa chỉ IP cho khách

Route::redirect('/here', '/there');

64

Nhiều giới hạn tốc độ

Nếu cần, bạn có thể trả về một mảng giới hạn tốc độ cho cấu hình bộ giới hạn tốc độ nhất định. Mỗi giới hạn tốc độ sẽ được đánh giá cho tuyến đường dựa trên thứ tự chúng được đặt trong mảng

Route::redirect('/here', '/there');

65

Đính kèm các bộ giới hạn tỷ lệ vào các tuyến đường

Bộ giới hạn tốc độ có thể được gắn vào các tuyến hoặc nhóm tuyến sử dụng phần mềm trung gian

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

186. Phần mềm trung gian ga chấp nhận tên của bộ giới hạn tốc độ mà bạn muốn gán cho tuyến đường

Route::redirect('/here', '/there');

66

Điều tiết với Redis

Thông thường, phần mềm trung gian

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

186 được ánh xạ tới lớp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

188. Ánh xạ này được xác định trong nhân HTTP của ứng dụng của bạn (

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

189). Tuy nhiên, nếu bạn đang sử dụng Redis làm trình điều khiển bộ đệm cho ứng dụng của mình, bạn có thể muốn thay đổi ánh xạ này để sử dụng lớp

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

190. Lớp này hiệu quả hơn trong việc quản lý giới hạn tốc độ bằng Redis

Route::redirect('/here', '/there');

67

Giả mạo phương thức biểu mẫu

Biểu mẫu HTML không hỗ trợ các hành động

Route::redirect('/here', '/there');

47,

Route::redirect('/here', '/there');

48 hoặc

Route::redirect('/here', '/there');

49. Vì vậy, khi xác định các tuyến đường

Route::redirect('/here', '/there');

47,

Route::redirect('/here', '/there');

48 hoặc

Route::redirect('/here', '/there');

49 được gọi từ biểu mẫu HTML, bạn sẽ cần thêm trường

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

197 ẩn vào biểu mẫu. Giá trị được gửi với trường

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

197 sẽ được sử dụng làm phương thức yêu cầu HTTP

Route::redirect('/here', '/there');

68

Để thuận tiện, bạn có thể sử dụng chỉ thị ________ 1199 Blade để tạo trường đầu vào ________ 1197

Route::redirect('/here', '/there');

69

Truy cập tuyến đường hiện tại

Bạn có thể sử dụng các phương thức

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

601,

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

602 và

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

603 trên mặt tiền

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

604 để truy cập thông tin về tuyến đường xử lý yêu cầu đến

Route::redirect('/here', '/there');

0

Bạn có thể tham khảo tài liệu API cho cả lớp cơ bản của Route facade và Route instance để xem xét tất cả các phương thức có sẵn trên bộ định tuyến và các lớp route

Chia sẻ tài nguyên nguồn gốc chéo (CORS)

Laravel có thể tự động trả lời các yêu cầu HTTP CORS

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

605 với các giá trị mà bạn định cấu hình. Tất cả cài đặt CORS có thể được định cấu hình trong tệp cấu hình

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

606 của ứng dụng của bạn. Các yêu cầu

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

605 sẽ tự động được xử lý bởi phần mềm trung gian

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

608 được bao gồm theo mặc định trong ngăn xếp phần mềm trung gian toàn cầu của bạn. Ngăn xếp phần mềm trung gian toàn cầu của bạn nằm trong nhân HTTP của ứng dụng (

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

189)

Lưu ý
Để biết thêm thông tin về CORS và tiêu đề CORS, vui lòng tham khảo.

Bộ nhớ đệm định tuyến

Khi triển khai ứng dụng của bạn vào sản xuất, bạn nên tận dụng route cache của Laravel. Sử dụng bộ đệm tuyến đường sẽ giảm đáng kể lượng thời gian cần thiết để đăng ký tất cả các tuyến đường của ứng dụng của bạn. Để tạo bộ đệm tuyến đường, hãy thực hiện lệnh Artisan

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

610

Sau khi chạy lệnh này, tệp tuyến đường được lưu trong bộ nhớ cache của bạn sẽ được tải theo mọi yêu cầu. Hãy nhớ rằng, nếu bạn thêm bất kỳ tuyến đường mới nào, bạn sẽ cần tạo bộ đệm tuyến đường mới. Do đó, bạn chỉ nên chạy lệnh

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {

610 trong quá trình triển khai dự án của mình

Tại sao ràng buộc mô hình tuyến đường không hoạt động?

Điều quan trọng cần lưu ý là tên ký tự đại diện trong tệp tuyến đường phải khớp chính xác với biến gợi ý loại được truyền cho hàm trong bộ điều khiển . Trong trường hợp của chúng tôi /games/{id} tương ứng với show(Game $id). Thay vào đó, nếu chúng tôi đã cố gắng làm điều gì đó như show(Game $game), ràng buộc mô hình tuyến đường sẽ không hoạt động.

Liên kết ẩn trong Laravel là gì?

Ràng buộc ngầm định . automatically resolves Eloquent models defined in routes or controller actions whose type-hinted variable names match a route segment name.

Làm cách nào để nhóm các tuyến đường trong Laravel?

Một nhóm route cơ bản trong Laravel được tạo bằng Route. group() , như hình bên dưới. .
Tuyến đường. nhóm([ // Tất cả tham số ở đây. ], function () { // Tất cả các tuyến đường đi đến đây. });
Tuyến đường. nhóm([ 'tiền tố' => '/admin', 'as' => 'admin. ', ], chức năng () {.
Tuyến đường. nhóm([ 'tiền tố' => '/admin', 'as' => 'admin. ', ], chức năng () {

Làm cách nào để xác định tuyến đường trong Laravel?

Tạo các tuyến đường trong Laravel .
http. // localhost/ Tuyến đường. get ('/', function () { return 'Chào mừng bạn đến với chỉ mục'; });
http. // localhost/người dùng/bảng điều khiển Tuyến đường. post('người dùng/bảng điều khiển', function () { return 'Chào mừng bạn đến với bảng điều khiển'; });
http. // localhost/người dùng/thêm tuyến đường. put('người dùng/thêm', hàm () { // });