Hướng dẫn php router github - php router github
Bộ định tuyến PHP đơn giản, nhanh chóng và mạnh mẽ, dễ dàng được tích hợp và trong bất kỳ dự án nào. Lấy cảm hứng nhiều từ cách Laravel xử lý định tuyến, với cả sự đơn giản và khả năng mở rộng trong tâm trí. Với bộ định tuyến đơn giản, bạn có thể tạo một dự án mới nhanh chóng, mà không phụ thuộc vào khung. Nó chỉ mất một vài dòng mã để bắt đầu: Hỗ trợ dự ánNếu bạn thích bộ định tuyến đơn giản và muốn xem sự phát triển và bảo trì tiếp tục của dự án, vui lòng xem xét hiển thị hỗ trợ của bạn bằng cách mua cho tôi một ly cà phê. Những người ủng hộ sẽ được liệt kê trong phần tín dụng của tài liệu này. Bạn có thể quyên góp bất kỳ số tiền bạn chọn bằng cách nhấp vào đây. Mục lục
Bắt đầuThêm phiên bản mới nhất của dự án bộ định tuyến đơn giản chạy lệnh này.
Ghi chúMục tiêu của dự án này là tạo ra một bộ định tuyến tương thích 100% với tài liệu Laravel, trong khi vẫn đơn giản nhất có thể, và dễ dàng tích hợp và thay đổi mà không ảnh hưởng đến tốc độ hoặc độ phức tạp. Nhẹ là ưu tiên số 1. Chúng tôi đã bao gồm một dự án demo đơn giản cho bộ định tuyến có thể được tìm thấy ở đây. Dự án này sẽ cung cấp cho bạn một sự hiểu biết cơ bản về cách thiết lập và sử dụng dự án bộ định tuyến đơn giản. Xin lưu ý rằng dự án demo chỉ bao gồm cách tích hợp 4 trong một dự án mà không có khung hiện có. Nếu bạn đang sử dụng một khung trong dự án của mình, việc triển khai có thể khác nhau.Bạn có thể tìm thấy bản demo-Project ở đây: https://github.com/skipperbent/simple-louter-demo Những gì chúng tôi sẽ không bao gồm:
Những gì chúng tôi bao gồm:
Yêu cầu
Đặc trưng
Cài đặt
composer require pecee/simple-router Thiết lập nginxNếu bạn đang sử dụng Nginx, vui lòng đảm bảo rằng việc viết URL được bật. Bạn có thể dễ dàng kích hoạt việc viết URL bằng cách thêm cấu hình sau cho tệp cấu hình NGINX cho dự án demo.
Thiết lập ApacheKhông có gì đặc biệt là cần thiết để Apache hoạt động. Chúng tôi đã bao gồm tệp
use Pecee\SimpleRouter\SimpleRouter;
/* Load external routes file */
require_once 'routes.php';
/**
* The default namespace for route-callbacks, so we don't have to specify it each time.
* Can be overwritten by using the namespace config option on your routes.
*/
SimpleRouter::setDefaultNamespace('\Demo\Controllers');
// Start the routing
SimpleRouter::start(); 4 trong thư mục
use Pecee\SimpleRouter\SimpleRouter;
/* Load external routes file */
require_once 'routes.php';
/**
* The default namespace for route-callbacks, so we don't have to specify it each time.
* Can be overwritten by using the namespace config option on your routes.
*/
SimpleRouter::setDefaultNamespace('\Demo\Controllers');
// Start the routing
SimpleRouter::start(); 5. Nếu việc viết lại không hoạt động cho bạn, vui lòng kiểm tra xem mô -đun
use Pecee\SimpleRouter\SimpleRouter;
/* Load external routes file */
require_once 'routes.php';
/**
* The default namespace for route-callbacks, so we don't have to specify it each time.
* Can be overwritten by using the namespace config option on your routes.
*/
SimpleRouter::setDefaultNamespace('\Demo\Controllers');
// Start the routing
SimpleRouter::start(); 6 (hỗ trợ HTACCESS) có được bật trong cấu hình Apache không.Ví dụ .htaccessDưới đây là một ví dụ về tệp
use Pecee\SimpleRouter\SimpleRouter;
/* Load external routes file */
require_once 'routes.php';
/**
* The default namespace for route-callbacks, so we don't have to specify it each time.
* Can be overwritten by using the namespace config option on your routes.
*/
SimpleRouter::setDefaultNamespace('\Demo\Controllers');
// Start the routing
SimpleRouter::start(); 4 hoạt động được sử dụng bởi đơn giản-Php-Router.Chỉ cần tạo một tệp
use Pecee\SimpleRouter\SimpleRouter;
/* Load external routes file */
require_once 'routes.php';
/**
* The default namespace for route-callbacks, so we don't have to specify it each time.
* Can be overwritten by using the namespace config option on your routes.
*/
SimpleRouter::setDefaultNamespace('\Demo\Controllers');
// Start the routing
SimpleRouter::start(); 4 mới trong các dự án của bạn
use Pecee\SimpleRouter\SimpleRouter;
/* Load external routes file */
require_once 'routes.php';
/**
* The default namespace for route-callbacks, so we don't have to specify it each time.
* Can be overwritten by using the namespace config option on your routes.
*/
SimpleRouter::setDefaultNamespace('\Demo\Controllers');
// Start the routing
SimpleRouter::start(); 5 thư mục và dán các nội dung bên dưới trong tệp mới được tạo của bạn. Điều này sẽ chuyển hướng tất cả các yêu cầu đến tệp 00 của bạn (xem phần Cấu hình bên dưới).
Thiết lập IISTrên IIS, bạn phải thêm một số dòng tệp 01 của mình vào thư mục
use Pecee\SimpleRouter\SimpleRouter;
/* Load external routes file */
require_once 'routes.php';
/**
* The default namespace for route-callbacks, so we don't have to specify it each time.
* Can be overwritten by using the namespace config option on your routes.
*/
SimpleRouter::setDefaultNamespace('\Demo\Controllers');
// Start the routing
SimpleRouter::start(); 5 hoặc tạo một dòng mới. Nếu việc viết lại không hoạt động cho bạn, vui lòng kiểm tra xem phiên bản IIS của bạn có bao gồm mô -đun 03 hay tải xuống và cài đặt chúng từ trang web Microsoft không.Ví dụ Web.ConfigDưới đây là một ví dụ về tệp 01 đang hoạt động được sử dụng bởi đơn giản-Php-Router.Chỉ cần tạo một tệp 01 mới trong các dự án của bạn
use Pecee\SimpleRouter\SimpleRouter;
/* Load external routes file */
require_once 'routes.php';
/**
* The default namespace for route-callbacks, so we don't have to specify it each time.
* Can be overwritten by using the namespace config option on your routes.
*/
SimpleRouter::setDefaultNamespace('\Demo\Controllers');
// Start the routing
SimpleRouter::start(); 5 thư mục và dán các nội dung bên dưới trong tệp mới được tạo của bạn. Điều này sẽ chuyển hướng tất cả các yêu cầu đến tệp 00 của bạn (xem phần Cấu hình bên dưới). Nếu tệp 01 đã tồn tại, hãy thêm phần 09 bên trong nhánh 10.xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="RewriteRequestsToPublic"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> conditions> <action type="Rewrite" url="/{R:0}" /> rule> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> conditions> <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" /> rule> rules> rewrite> system.webServer> configuration> Xử lý sự cốNếu bạn không có tệp 11 trong dự án của mình, bạn có thể nhận được 12 (không tìm thấy).Để thêm 11 vào danh sách IIS bỏ qua, hãy thêm dòng sau vào nhóm 14:
Bạn cũng có thể tạo một ngoại lệ cho các tệp có một số tiện ích mở rộng:
Nếu bạn đang sử dụng 15, bạn sẽ nhận được 16 như một phần của giá trị trả về.Example:
Cấu hìnhTạo một tệp mới, đặt tên cho nó 17 và đặt nó vào thư mục thư viện của bạn. Đây sẽ là tệp nơi bạn xác định tất cả các tuyến đường cho dự án của mình.CẢNH BÁO: Không bao giờ đặt các tuyến đường của bạn.php trong thư mục công khai của bạn! Trong 00 của bạn yêu cầu 17 mới được tạo của bạn và gọi phương thức 20. Điều này sẽ kích hoạt và thực hiện định tuyến thực tế của các yêu cầu.Không bắt buộc, nhưng bạn có thể đặt 21 thành tiền tố tất cả các tuyến với không gian tên cho bộ điều khiển của bạn. Điều này sẽ đơn giản hóa mọi thứ một chút, vì bạn sẽ không phải chỉ định không gian tên cho bộ điều khiển của bạn trên mỗi tuyến đường.Đây là một ví dụ về tệp
use Pecee\SimpleRouter\SimpleRouter;
/* Load external routes file */
require_once 'routes.php';
/**
* The default namespace for route-callbacks, so we don't have to specify it each time.
* Can be overwritten by using the namespace config option on your routes.
*/
SimpleRouter::setDefaultNamespace('\Demo\Controllers');
// Start the routing
SimpleRouter::start(); Chức năng trợ giúpChúng tôi khuyên bạn nên thêm các chức năng trợ giúp này vào dự án của bạn. Những điều này sẽ cho phép bạn truy cập chức năng của bộ định tuyến dễ dàng hơn. Để thực hiện các chức năng bên dưới, chỉ cần sao chép mã vào một tệp mới và yêu cầu tệp trước khi khởi tạo bộ định tuyến hoặc sao chép 23 mà chúng tôi đã đưa vào thư viện này. 0Tuyến đườngBạn có nhớ tệp 17 bạn yêu cầu trong 00 của bạn không? Tệp này là nơi bạn đặt tất cả các quy tắc tùy chỉnh của bạn để định tuyến.Định tuyến cơ bảnDưới đây là một ví dụ rất cơ bản về việc thiết lập một tuyến đường. Tham số đầu tiên là URL mà tuyến sẽ khớp - tham số tiếp theo là hàm 26 hoặc gọi lại sẽ được kích hoạt khi tuyến đường khớp.SimpleRouter::get('/', function() { return 'Hello world'; }); Lớp gợi ýBạn có thể sử dụng gợi ý lớp để tải một lớp & phương thức như thế này: 2Phương pháp có sẵnỞ đây bạn có thể thấy một danh sách trên tất cả các tuyến có sẵn: 3Nhiều http-verbsĐôi khi bạn có thể cần tạo một tuyến đường chấp nhận nhiều http-verbs. Nếu bạn cần phù hợp với tất cả các bản verbs HTTP, bạn có thể sử dụng phương thức 27. 4Chúng tôi đã tạo một phương thức đơn giản phù hợp với 5 và 6 được sử dụng phổ biến nhất: 5Tham số tuyến đườngTham số cần thiếtBạn sẽ tự hỏi đúng cách biết làm thế nào bạn phân tích các tham số từ URL của bạn. Ví dụ: bạn có thể muốn chụp ID 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. 6Bạn có thể xác định càng nhiều tham số tuyến theo yêu cầu của tuyến đường của bạn: 7Lưu ý: Các tham số tuyến luôn được bao bọc trong vòng niềng răng 30 31 braces and should consist of alphabetic characters. Route parameters can only contain certain characters like 32, 33, 34, 35 and 36. If your route contain other
characters, please see Custom regex for matching parameters.Tham số tùy chọnThỉnh thoảng bạn có thể cần chỉ định một tham số tuyến đường, nhưng làm cho sự hiện diện của tham số tuyến đó tùy chọn. Bạn có thể làm như vậy bằng cách đặt một? Đánh dấu sau tên tham số. Đảm bảo cung cấp cho biến tương ứng của tuyến một giá trị mặc định: 8Các ràng buộc biểu thức chính quyBạn có thể hạn chế định dạng của các tham số tuyến của mình bằng cách sử dụng phương thức ở trường hợp tuyến đường. Phương thức nơi chấp nhận tên của tham số và biểu thức chính quy xác định cách bị hạn chế tham số: 9Trò chơi biểu thức thường xuyênBạn có thể xác định một trận đấu biểu hiện thường xuyên cho toàn bộ tuyến nếu bạn muốn. Điều này rất hữu ích nếu bạn ví dụ đang tạo một hộp mô hình tải URL từ AJAX. Ví dụ dưới đây là sử dụng các biểu thức chính quy sau: 37 về cơ bản chỉ khớp với 38 và vượt qua tham số tiếp theo là một chuỗi - và tiếp theo là một số (nhưng tùy chọn).Trận đấu: 39, 40Sẽ không khớp: 38
Các nhóm khớp được chỉ định trong regex sẽ được truyền dưới dạng tham số: composer require pecee/simple-router 0Tùy chỉnh regex cho các tham số phù hợpTheo mặc định đơn giản-Php-Router sử dụng biểu thức chính quy 42. Nó sẽ khớp với 32, 33, 34, 35 và 36 ký tự trong các tham số. Quyết định này được đưa ra với tốc độ và độ tin cậy trong tâm trí, vì trận đấu này sẽ phù hợp với cả chữ cái, số và hầu hết các biểu tượng được sử dụng trên Internet.Tuy nhiên, đôi khi có thể cần thêm một biểu thức thường xuyên tùy chỉnh để phù hợp với các ký tự nâng cao hơn như chữ cái nước ngoài 48, v.v.Bạn có thể kiểm tra biểu thức thông thường tùy chỉnh của mình bằng cách sử dụng trên trang web regex101.com. Thay vì thêm một biểu thức thông thường tùy chỉnh vào tất cả các tham số của bạn, bạn chỉ cần thêm một biểu thức chính quy toàn cầu sẽ được sử dụng trên tất cả các tham số trên tuyến đường. Lưu ý: Nếu bạn biểu thức thông thường có sẵn, chúng tôi khuyên bạn nên sử dụng tham số toàn cầu trên một nhóm như được trình bày trong các ví dụ dưới đây. If you the regular expression to be available across, we recommend using the global parameter on a group as demonstrated in the examples below. Thí dụVí dụ này sẽ đảm bảo rằng tất cả các tham số sử dụng 49 ( 33, 32, 35, 36, 34, 55, 56, 57)composer require pecee/simple-router 1Bạn cũng có thể áp dụng cài đặt này cho một nhóm nếu bạn cần nhiều tuyến đường để sử dụng biểu thức thông thường tùy chỉnh của mình khi phân tích các tham số. composer require pecee/simple-router 2Các tuyến đường được đặt tênCá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 một tuyến đường bằng cách chuỗi phương thức tên vào định nghĩa tuyến đường: composer require pecee/simple-router 3Bạn cũng có thể chỉ định tên cho các hành động của bộ điều khiển: composer require pecee/simple-router 4Tạo URL cho các tuyến đường được đặt tênKhi bạn đã gán một tên cho một tuyến đường nhất định, bạn có thể sử dụng tên của tuyến đường khi tạo URL hoặc chuyển hướng thông qua chức năng trợ giúp toàn cầu 58 (xem phần trợ lý):composer require pecee/simple-router 5Nếu tuyến được đặt tên xác định tham số, bạn có thể chuyển các tham số là đối số thứ hai cho hàm 58. Các tham số đã cho sẽ tự động được chèn vào URL ở vị trí chính xác của chúng:composer require pecee/simple-router 6Để biết thêm thông tin về URL, vui lòng xem phần URLS. Nhóm bộ định tuyếnCác nhóm tuyến cho phép bạn chia sẻ các thuộc tính tuyến, chẳng hạn như phần mềm trung gian hoặc không gian tên, 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 mỗi tuyến đường riêng lẻ. Các thuộc tính được chia sẻ được chỉ định ở định dạng mảng là tham số đầu tiên cho phương thức 60.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 khóa phần mềm trung gian trong mảng thuộc tính nhóm. Phần mềm trung gian được thực hiện theo thứ tự chúng được liệt kê trong mảng: composer require pecee/simple-router 7Không gian tênMột trường hợp sử dụng phổ biến khác cho các nhóm tuyến đường là gán cùng một không gian tên PHP cho một nhóm bộ điều khiển bằng tham số 61 trong mảng nhóm:Ghi chúKhông gian tên nhóm sẽ chỉ được thêm vào các tuyến đường với các cuộc gọi lại tương đối. Ví dụ: nếu tuyến đường của bạn có một cuộc gọi lại tuyệt đối như 62, không gian tên từ tuyến đường sẽ không được chuẩn bị. Để khắc phục điều này, bạn có thể thực hiện tương đối gọi lại bằng cách xóa 63 khi bắt đầu cuộc gọi lại.composer require pecee/simple-router 8Bạn có thể thêm các tham số vào các tiền tố của các tuyến đường của bạn. Các tham số từ các tuyến trước của bạn sẽ được đưa vào các tuyến đường của bạn sau khi bất kỳ tham số yêu cầu tuyến nào, bắt đầu từ lâu đời nhất đến mới nhất. composer require pecee/simple-router 9Subdomain-routingCác nhóm tuyến cũng có thể được sử dụng để xử lý định tuyến tên miền phụ. Các miền phụ có thể được chỉ định các tham số tuyến giống như URL tuyến, cho phép bạn nắm bắt một phần của miền phụ để sử dụng trong tuyến đường hoặc bộ điều khiển của bạn. Miền phụ có thể được chỉ định bằng cách sử dụng khóa 64 trên mảng thuộc tính nhóm: 0Tiền tố định tuyếnThuộc tính nhóm 65 có thể được sử dụng để tiền tố từng tuyến trong nhóm với một URL nhất định. Ví dụ: bạn có thể muốn tiền tố tất cả các URL tuyến trong nhóm với 66: 1Bạn cũng có thể sử dụng các tham số trong các nhóm của mình: 2Nhóm một phầnCác nhóm bộ định tuyến một phần có lợi ích giống như một nhóm bình thường, nhưng chỉ được hiển thị một khi URL phù hợp với một nhóm bình thường luôn được hiển thị để lấy các tuyến đường của trẻ. Do đó, các nhóm một phần giống như sự kết hợp của một tuyến đường truyền thống với lợi ích của một nhóm.are only rendered once the url has matched in contrast to a normal group which are always rendered in order to retrieve it's child routes. Partial groups are therefore more like a hybrid of a traditional route with the benefits of a group. Điều này có thể cực kỳ hữu ích trong các tình huống mà bạn chỉ muốn thêm các tuyến đặc biệt, nhưng chỉ khi một tiêu chí hoặc logic nhất định đã được đáp ứng. Lưu ý: Sử dụng các nhóm một phần thận trọng vì các tuyến đường được thêm vào chỉ được hiển thị và có sẵn một khi URL của nhóm một phần đã khớp. Điều này có thể gây ra 67 not to find urls for
the routes added within before the partial-group has been matched and is rendered.Example: 3Hình thức giả mạo phương phápCác biểu mẫu HTML không hỗ trợ các hành động 7, 8 hoặc
use Pecee\SimpleRouter\SimpleRouter;
/* Load external routes file */
require_once 'routes.php';
/**
* The default namespace for route-callbacks, so we don't have to specify it each time.
* Can be overwritten by using the namespace config option on your routes.
*/
SimpleRouter::setDefaultNamespace('\Demo\Controllers');
// Start the routing
SimpleRouter::start(); 0. Vì vậy, khi xác định các tuyến 7, 8 hoặc
use Pecee\SimpleRouter\SimpleRouter;
/* Load external routes file */
require_once 'routes.php';
/**
* The default namespace for route-callbacks, so we don't have to specify it each time.
* Can be overwritten by using the namespace config option on your routes.
*/
SimpleRouter::setDefaultNamespace('\Demo\Controllers');
// Start the routing
SimpleRouter::start(); 0 được gọi từ biểu mẫu HTML, bạn sẽ cần thêm trường 74 ẩn vào biểu mẫu. Giá trị được gửi với trường 74 sẽ được sử dụng làm phương thức yêu cầu HTTP: 4Truy cập tuyến đường hiện tạiBạn có thể truy cập thông tin về tuyến đường hiện tại được tải bằng cách sử dụng phương thức sau: 5Những ví dụ khácBạn có thể tìm thấy nhiều ví dụ khác trong tệp ví dụ 17 bên dưới: 6Bảo vệ CSRFBất kỳ hình thức nào đăng lên các tuyến 6, 7 hoặc
use Pecee\SimpleRouter\SimpleRouter;
/* Load external routes file */
require_once 'routes.php';
/**
* The default namespace for route-callbacks, so we don't have to specify it each time.
* Can be overwritten by using the namespace config option on your routes.
*/
SimpleRouter::setDefaultNamespace('\Demo\Controllers');
// Start the routing
SimpleRouter::start(); 0 nên bao gồm CSRF-Token. Chúng tôi thực sự khuyên bạn nên bật xác nhận CSRF trên trang web của bạn để tối đa hóa bảo mật.Bạn có thể sử dụng 80 để kích hoạt xác nhận CSRF trên tất cả các yêu cầu. Nếu bạn cần vô hiệu hóa xác minh cho các URL cụ thể, vui lòng tham khảo phần "Trình điều trị CSRF tùy chỉnh" bên dưới.Theo mặc định, bộ định tuyến đơn giản sẽ sử dụng lớp 81. Nhà cung cấp này sẽ lưu trữ bộ bảo mật trong cookie trên máy khách. Nếu bạn muốn lưu trữ mã thông báo ở nơi khác, vui lòng tham khảo phần "Tạo nhà cung cấp mã thông báo tùy chỉnh" bên dưới.Thêm CSRF-VerifierKhi bạn đã tạo CSRF-Verifer của mình, bạn cần nói với Router đơn giản rằng nó sẽ sử dụng nó. Bạn có thể làm điều này bằng cách thêm dòng sau trong tệp 17 của bạn: 7Nhận CSRF-TokenKhi đăng lên bất kỳ URL nào có kích hoạt xác minh CSRF, bạn cần đăng CSRF-Token nếu không, yêu cầu sẽ bị từ chối. Bạn có thể nhận được CSRF-Token bằng cách gọi phương thức trợ giúp: Bạn cũng có thể nhận được mã thông báo trực tiếp:
8Tên/khóa mặc định cho trường đầu vào là 83 và được xác định trong hằng số 84 trong lớp 80. Bạn có thể thay đổi khóa bằng cách ghi đè lên hằng số trong lớp CSRF-Verifier của riêng bạn.Example: Ví dụ dưới đây sẽ đăng lên URL hiện tại với trường ẩn " 83". 9CSRF-Verifier tùy chỉnhTạo một lớp mới và mở rộng lớp phần mềm trung gian 80 được cung cấp theo mặc định với thư viện bộ định tuyến đơn giản.Thêm thuộc tính 88 với một mảng URL vào các tuyến bạn muốn loại trừ/danh sách trắng khỏi xác thực CSRF. Sử dụng 89 ở cuối URL sẽ khớp với toàn bộ URL.Dưới đây là một ví dụ cơ bản về lớp CSRF-Verifier: 0Nhà cung cấp mã thông báo tùy chỉnhTheo mặc định, 80 sẽ sử dụng 81 để lưu trữ mã thông báo trong cookie trên máy khách.Nếu bạn cần lưu trữ mã thông báo ở nơi khác, bạn có thể làm điều đó bằng cách tạo lớp của riêng mình và triển khai lớp 92. 1Tiếp theo, bạn cần đặt triển khai 92 tùy chỉnh của mình trên lớp 80 trong tệp tuyến của bạn: 2Middle WaresMiddleWares là các lớp tải trước khi tuyến đường được hiển thị. Một phần mềm trung gian có thể được sử dụng để xác minh rằng người dùng được đăng nhập - hoặc để đặt các tham số cụ thể cho yêu cầu/tuyến đường hiện tại. MiddleWares phải triển khai giao diện 95.Thí dụ 3Ngoại lệExceptHandler là các lớp xử lý tất cả các ngoại lệ. Excenshandlers phải triển khai giao diện 96.Xử lý 404, 403 và các lỗi khácNếu bạn chỉ đơn giản muốn bắt một 404 (không tìm thấy trang), v.v., bạn có thể sử dụng phương thức trợ giúp tĩnh 97.Điều này sẽ thêm một phương thức gọi lại được bắn bất cứ khi nào xảy ra lỗi trên tất cả các tuyến đường. Ví dụ cơ bản dưới đây chỉ đơn giản là chuyển hướng trang đến 98 nếu xảy ra 12 (404). Mã phải được đặt trong tệp chứa các tuyến đường của bạn. 4Ví dụ trên sẽ chuyển hướng tất cả các lỗi với mã HTTP composer require pecee/simple-router 00 (không tìm thấy trang) sang 98 và composer require pecee/simple-router 02 (bị cấm) đến composer require pecee/simple-router 03.Nếu bạn không muốn chuyển hướng, nhưng muốn trang lỗi được hiển thị trên hiện tại-URL, bạn có thể yêu cầu bộ định tuyến thực thi cuộc gọi lại viết lại như vậy: 5Sử dụng trình xử lý ngoại lệ tùy chỉnhĐây là một ví dụ cơ bản về triển khai ExceptHandler (vui lòng xem "Dễ dàng ghi đè tuyến đường sắp được tải" để biết các ví dụ về cách thay đổi cuộc gọi lại). 6Bạn có thể thêm lớp Handler ngoại lệ tùy chỉnh của mình vào nhóm của mình bằng cách sử dụng composer require pecee/simple-router 04 Cài đặt-Tích phân. composer require pecee/simple-router 04 có thể là tên lớp hoặc mảng tên lớp. 7Ngăn chặn sự hợp nhất của người làm việc ngoại lệ phụ huynhTheo mặc định, bộ định tuyến sẽ hợp nhất các trình điều khiển ngoại lệ cho bất kỳ trình xử lý nào được cung cấp bởi các nhóm cha mẹ và sẽ được thực thi theo thứ tự mới nhất sang lâu đời nhất. Nếu bạn muốn trình xử lý ngoại lệ nhóm của mình được thực thi độc lập, bạn có thể thêm thuộc tính composer require pecee/simple-router 06 và đặt nó thành composer require pecee/simple-router 07. 8URLTheo mặc định, tất cả các tuyến điều khiển và tuyến tài nguyên sẽ sử dụng phiên bản đơn giản của URL của họ làm tên. Bạn dễ dàng sử dụng chức năng trợ giúp phím tắt 67 để truy xuất URL cho các tuyến đường của bạn hoặc thao tác URL hiện tại. 67 sẽ trả về một đối tượng composer require pecee/simple-router 10 sẽ trả về composer require pecee/simple-router 11 khi được hiển thị, do đó nó có thể được sử dụng một cách an toàn trong các mẫu, v.v. nhưng chứa tất cả các phương thức trợ giúp hữu ích trong lớp composer require pecee/simple-router 10 như composer require pecee/simple-router 13, composer require pecee/simple-router 14, v.v.Nhận URL hiện tạiNó chưa bao giờ dễ dàng hơn để có được và/hoặc thao tác URL hiện tại. Ví dụ dưới đây cho bạn biết cách lấy URL hiện tại: 9Nhận theo tên (tuyến đường đơn)xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="RewriteRequestsToPublic"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> conditions> <action type="Rewrite" url="/{R:0}" /> rule> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> conditions> <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" /> rule> rules> rewrite> system.webServer> configuration>0 Nhận theo tên (tuyến điều khiển)xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="RewriteRequestsToPublic"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> conditions> <action type="Rewrite" url="/{R:0}" /> rule> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> conditions> <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" /> rule> rules> rewrite> system.webServer> configuration>1 Nhận theo lớpxml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="RewriteRequestsToPublic"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> conditions> <action type="Rewrite" url="/{R:0}" /> rule> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> conditions> <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" /> rule> rules> rewrite> system.webServer> configuration>2 Sử dụng tên tùy chỉnh cho các phương thức trên tuyến điều khiển/tài nguyênxml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="RewriteRequestsToPublic"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> conditions> <action type="Rewrite" url="/{R:0}" /> rule> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> conditions> <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" /> rule> rules> rewrite> system.webServer> configuration>3 Nhận URL Bộ điều khiển REST/Tài nguyênxml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="RewriteRequestsToPublic"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> conditions> <action type="Rewrite" url="/{R:0}" /> rule> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> conditions> <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" /> rule> rules> rewrite> system.webServer> configuration>4 Thao tác URLBạn có thể dễ dàng điều khiển các chuỗi truy vấn, bằng cách thêm các đối số tham số GET của bạn. xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="RewriteRequestsToPublic"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> conditions> <action type="Rewrite" url="/{R:0}" /> rule> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> conditions> <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" /> rule> rules> rewrite> system.webServer> configuration>5 Bạn có thể xóa tham số chuỗi truy vấn bằng cách đặt giá trị thành composer require pecee/simple-router 15.Ví dụ dưới đây sẽ xóa bất kỳ tham số chuỗi truy vấn nào có tên composer require pecee/simple-router 16 khỏi URL nhưng giữ cho tất cả các tham số chuỗi truy vấn khác:
xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="RewriteRequestsToPublic"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> conditions> <action type="Rewrite" url="/{R:0}" /> rule> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> conditions> <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" /> rule> rules> rewrite> system.webServer> configuration>6 Để biết thêm thông tin, vui lòng kiểm tra phần Thủ thuật URL hữu ích của tài liệu. Thủ thuật URL hữu íchGọi 58 sẽ luôn trả về một đối tượng composer require pecee/simple-router 10. Sau khi kết xuất, nó sẽ trả về một composer require pecee/simple-router 11 của người thân 58, vì vậy an toàn để sử dụng trong các mẫu, v.v.Tuy nhiên, điều này cho phép chúng tôi sử dụng các phương thức hữu ích trên đối tượng composer require pecee/simple-router 10 như composer require pecee/simple-router 14 và composer require pecee/simple-router 13 hoặc truy xuất các phần cụ thể của URL như đường dẫn, tham số truy vấn, máy chủ, v.v. hơn.Trong ví dụ dưới đây, chúng tôi kiểm tra xem URL hiện tại có chứa phần composer require pecee/simple-router 24 không.xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="RewriteRequestsToPublic"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> conditions> <action type="Rewrite" url="/{R:0}" /> rule> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> conditions> <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" /> rule> rules> rewrite> system.webServer> configuration>7 Như đã đề cập trước đó, bạn cũng có thể sử dụng đối tượng composer require pecee/simple-router 10 để hiển thị các phần cụ thể của URL hoặc kiểm soát phần nào của URL bạn muốn.xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="RewriteRequestsToPublic"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> conditions> <action type="Rewrite" url="/{R:0}" /> rule> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> conditions> <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" /> rule> rules> rewrite> system.webServer> configuration>8 Để biết thêm các phương pháp có sẵn, vui lòng kiểm tra lớp composer require pecee/simple-router 26.Đầu vào & tham sốBộ định tuyến đơn giản cung cấp các thư viện và người trợ giúp giúp bạn dễ dàng quản lý và thao tác các tham số đầu vào như composer require pecee/simple-router 27, composer require pecee/simple-router 28 và composer require pecee/simple-router 29.Sử dụng lớp đầu vào để quản lý các tham sốBạn có thể sử dụng lớp composer require pecee/simple-router 30 để dễ dàng truy cập và quản lý các tham số từ yêu cầu của bạn. Lớp composer require pecee/simple-router 30 cung cấp các tính năng mở rộng như sao chép/di chuyển các tệp được tải lên trực tiếp trên đối tượng, nhận phần mở rộng tệp, loại mime, v.v.Nhận giá trị tham số đơncomposer require pecee/simple-router 32Để nhanh chóng nhận được giá trị từ một tham số, bạn có thể sử dụng hàm trợ giúp composer require pecee/simple-router 33.Điều này sẽ tự động cắt giá trị và đảm bảo rằng nó không trống. Nếu nó trống, composer require pecee/simple-router 34 sẽ được trả lại thay thế.Lưu ý: Hàm này trả về composer require pecee/simple-router 11 unless the parameters are grouped together, in that case it will return an composer require pecee/simple-router 36 of values.
Example: Ví dụ này phù hợp với cả bài đăng và nhận phương pháp yêu cầu và nếu tên trống thì "khách" có giá trị mặc định sẽ được trả về. xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="RewriteRequestsToPublic"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> conditions> <action type="Rewrite" url="/{R:0}" /> rule> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> conditions> <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" /> rule> rules> rewrite> system.webServer> configuration>9 Nhận đối tượng tham sốKhi xử lý các tệp tải tệp, nó có thể hữu ích để truy xuất đối tượng tham số thô. Tìm kiếm đối tượng với giá trị mặc định trên nhiều phương pháp yêu cầu cụ thể hoặc cụ thể: Ví dụ dưới đây sẽ trả về một đối tượng composer require pecee/simple-router 37 nếu tham số được tìm thấy hoặc trả về composer require pecee/simple-router 34. Nếu các tham số được nhóm lại, nó sẽ trả về một mảng các đối tượng composer require pecee/simple-router 37. 0Nhận tham số Ví dụ dưới đây sẽ trả về một đối tượng composer require pecee/simple-router 37 nếu tham số được tìm thấy hoặc trả về composer require pecee/simple-router 34. Nếu các tham số được nhóm lại, nó sẽ trả về một mảng các đối tượng composer require pecee/simple-router 37. 1Nhận tham số Ví dụ dưới đây sẽ trả về một đối tượng composer require pecee/simple-router 37 nếu tham số được tìm thấy hoặc trả về composer require pecee/simple-router 34. Nếu các tham số được nhóm lại, nó sẽ trả về một mảng các đối tượng composer require pecee/simple-router 37. 2Nhận tham số Ví dụ dưới đây sẽ trả về một đối tượng composer require pecee/simple-router 51 nếu tham số được tìm thấy hoặc trả về composer require pecee/simple-router 34. Nếu các tham số được nhóm lại, nó sẽ trả về một mảng các đối tượng composer require pecee/simple-router 51. 3Quản lý tập tin 4Nhận tất cả các tham số 5Tất cả các đối tượng thực hiện giao diện composer require pecee/simple-router 55 và sẽ luôn chứa các phương thức sau:
composer require pecee/simple-router 51 có các phương thức tương tự như trên cùng với một số phương thức cụ thể về tệp khác như:
Kiểm tra xem các tham số có tồn tại khôngBạn có thể dễ dàng nếu nhiều mục tồn tại bằng cách sử dụng phương thức composer require pecee/simple-router 74. Nó mô phỏng theo composer require pecee/simple-router 75 vì nó có thể được sử dụng để lọc trên các phương pháp yêu cầu và hỗ trợ cả composer require pecee/simple-router 11 và composer require pecee/simple-router 36 làm giá trị tham số.Example: 6Sự kiệnPhần này sẽ giúp bạn hiểu cách đăng ký các cuộc gọi lại của riêng bạn vào các sự kiện trong bộ định tuyến. Nó cũng sẽ bao gồm những điều cơ bản của người làm việc sự kiện; Cách sử dụng các trình xử lý được cung cấp với bộ định tuyến và cách tạo các công cụ sự kiện tùy chỉnh của riêng bạn. Các sự kiện có sẵnPhần này chứa tất cả các sự kiện có sẵn có thể được đăng ký bằng cách sử dụng composer require pecee/simple-router 78.Tất cả các cuộc gọi lại sự kiện sẽ truy xuất một đối tượng composer require pecee/simple-router 79 làm tham số. Đối tượng này chứa dễ dàng truy cập vào tên sự kiện, bộ định tuyến- và yêu cầu và bất kỳ cuộc thi sự kiện đặc biệt nào liên quan đến sự kiện đã cho. Bạn có thể thấy những đối số sự kiện đặc biệt nào mỗi sự kiện trả về trong danh sách dưới đây.
Các đám cháy trước khi dây giữa cho một tuyến đường được thực hiện. 23 24Example: Các vụ cháy trước khi CSRF-Verifier được thực hiện. Đăng ký sự kiện mớiĐể đăng ký một sự kiện mới, bạn cần tạo một thể hiện mới của đối tượng composer require pecee/simple-router 78. Trên đối tượng này, bạn có thể thêm bao nhiêu cuộc gọi lại như bạn muốn bằng cách gọi phương thức 26.Khi bạn đã đăng ký các sự kiện, hãy đảm bảo thêm nó vào bộ định tuyến bằng cách gọi 27. Chúng tôi khuyên bạn nên thêm người làm việc sự kiện của bạn trong 17 của bạn.Chúng ta hãy đi qua cách tạo lớp Handler sự kiện rất riêng của bạn. Dưới đây là một ví dụ cơ bản về một người điều khiển sự kiện tùy chỉnh có tên là 32. Ý tưởng của mẫu dưới đây là ghi lại tất cả các sự kiện vào cơ sở dữ liệu khi được kích hoạt. Hy vọng rằng nó sẽ đủ để cung cấp cho bạn một ý tưởng về cách các nhân viên làm việc sự kiện hoạt động. 8Nâng caoTắt nhiều tuyến đườngTheo mặc định, bộ định tuyến sẽ cố gắng thực hiện tất cả các tuyến khớp khớp với một URL đã cho. Để dừng bộ định tuyến thực hiện bất kỳ tuyến đường nào nữa, bất kỳ phương thức nào cũng có thể trả về một giá trị. Hành vi này có thể được vô hiệu hóa bằng cách đặt 33 trong tệp 17 của bạn. Đây là hành vi tương tự như phiên bản 3 trở xuống.Hạn chế quyền truy cập vào IPBạn có thể truy cập danh sách trắng và/hoặc danh sách đen vào IP bằng cách sử dụng bản dựng trong phần mềm trung gian 35.Tạo phần mềm trung gian tùy chỉnh của riêng bạn và mở rộng lớp 35.Lớp 35 chứa hai thuộc tính 38 và 39 có thể được thêm vào phần mềm trung gian của bạn để thay đổi IP có quyền truy cập vào các tuyến đường của bạn.Bạn có thể sử dụng 89 để hạn chế quyền truy cập vào một loạt các IPS. 9Bạn có thể thêm phần mềm trung gian vào nhiều tuyến đường bằng cách thêm phần mềm trung gian của bạn vào một nhóm. Đặt đường dẫn cơ sở tùy chỉnhĐôi khi nó có thể hữu ích để thêm một đường dẫn cơ sở tùy chỉnh vào tất cả các tuyến đường được thêm vào. Điều này có thể dễ dàng được thực hiện bằng cách tận dụng hỗ trợ xử lý sự kiện của dự án. 0Trong ví dụ được hiển thị ở trên, chúng tôi tạo ra một sự kiện composer require pecee/simple-router 84 mới kích hoạt, khi một tuyến đường mới được thêm vào. Chúng tôi bỏ qua tất cả các chương trình con vì những điều này sẽ kế thừa URL từ cha mẹ của họ. Sau đó, nếu tuyến đường là một nhóm, chúng tôi thay đổi tiền tố nếu không chúng tôi thay đổi URL.otherwise we change the url. Viết lại URLThay đổi tuyến đường hiện tạiĐôi khi nó có thể hữu ích để điều khiển tuyến đường sắp được tải. Bộ định tuyến đơn giản cho phép bạn dễ dàng thao tác và thay đổi các tuyến sắp được hiển thị. Tất cả thông tin về tuyến đường hiện tại được lưu trữ trong thuộc tính 43 của trường hợp ____342.Để dễ dàng truy cập, bạn có thể sử dụng chức năng trợ giúp phím tắt 44 thay vì gọi trực tiếp lớp 45. 1BootManager: Đang tải các tuyến đường độngĐôi khi có thể cần phải giữ các URL được lưu trữ trong cơ sở dữ liệu, tệp hoặc tương tự. Trong ví dụ này, chúng tôi muốn URL 46 tải tuyến đường 47 mà bộ định tuyến biết, bởi vì nó được xác định trong tệp 17.Để can thiệp vào bộ định tuyến, chúng tôi tạo một lớp thực hiện giao diện 49. Lớp này sẽ được tải trước bất kỳ quy tắc nào khác trong 17 và cho phép chúng tôi "thay đổi" tuyến đường hiện tại, nếu bất kỳ tiêu chí nào của chúng tôi được đáp ứng (như đến từ URL 46). 2Các điều trên phải khá tự giải thích và có thể dễ dàng thay đổi thành vòng lặp qua lưu trữ URL trong cơ sở dữ liệu, tệp hoặc bộ đệm. Điều xảy ra là nếu tuyến đường hiện tại khớp với tuyến đường được xác định trong chỉ mục của mảng 52 của chúng tôi, chúng tôi sẽ đặt tuyến đường thành giá trị mảng thay thế.Bằng cách này, tuyến đường bây giờ sẽ tải URL 47 thay vì 46.Điều cuối cùng chúng ta cần làm, là thêm trình quản lý khởi động tùy chỉnh của chúng tôi vào tệp 17. Bạn có thể tạo bao nhiêu BootManagers tùy thích và dễ dàng thêm chúng vào tệp 17 của bạn. 3Thêm các tuyến đường bằng tayLớp 57 được tham chiếu trong ví dụ trước, chỉ là một lớp trợ giúp đơn giản biết cách giao tiếp với lớp 01. Nếu bạn tham gia một thử thách, muốn kiểm soát đầy đủ hoặc chỉ đơn giản là muốn tạo lớp trợ giúp 01 của riêng bạn, ví dụ này là dành cho bạn. 4Trình tải lớp tùy chỉnhBạn có thể dễ dàng mở rộng bộ định tuyến đơn giản để hỗ trợ các khung tiêm tùy chỉnh như PHP-di bằng cách tận dụng khả năng thêm trình tải lớp tùy chỉnh của bạn. Trình tải lớp phải kế thừa giao diện 60.Example: 5Tiếp theo, chúng tôi cần định cấu hình 17 của chúng tôi để bộ định tuyến sử dụng lớp 62 của chúng tôi để tải các lớp. Điều này có thể được thực hiện bằng cách thêm dòng sau vào tệp 17 của bạn. 6Tích hợp với PHP-diHỗ trợ PHP-DI đã bị ngừng bởi phiên bản 4.3, tuy nhiên bạn có thể dễ dàng thêm nó một lần nữa bằng cách tạo trình tải lớp của riêng bạn như ví dụ dưới đây: 7Thông sốPhần này chứa các mẹo & thủ thuật nâng cao về việc mở rộng việc sử dụng cho các tham số. Mở rộngĐây là một ví dụ đơn giản về tích hợp vào một khung. Khung có lớp 01 riêng được kế thừa từ lớp 57. Điều này cho phép khung để thêm chức năng tùy chỉnh như tải tệp 17 tùy chỉnh hoặc thêm thông tin gỡ lỗi, v.v. 8Giúp đỡ và hỗ trợPhần này sẽ đi vào chi tiết về cách gỡ lỗi bộ định tuyến và trả lời một số câu hỏi thường gặp- và các vấn đề. Các vấn đề và sửa chữa phổ biếnPhần này sẽ đi qua các vấn đề phổ biến và cách giải quyết chúng. Tham số sẽ không khớp hoặc tuyến không hoạt động với các ký tự đặc biệtMọi người thường gặp vấn đề này khi một hoặc nhiều tham số chứa các ký tự đặc biệt. Bộ định tuyến sử dụng biểu thức thường xuyên thưa thớt phù hợp với các chữ cái từ A-Z cùng với các số khi khớp các tham số, để cải thiện hiệu suất. Tất cả các ký tự khác phải được xác định thông qua tùy chọn 67 trên tuyến đường của bạn.Bạn có thể đọc thêm về việc thêm biểu thức thông thường tùy chỉnh của riêng bạn để phù hợp với các tham số bằng cách nhấp vào đây. Nhiều tuyến đường phù hợp? Cái nào có ưu tiên?Bộ định tuyến sẽ khớp các tuyến theo thứ tự chúng được thêm vào và sẽ hiển thị nhiều tuyến đường, nếu chúng khớp. Nếu bạn muốn bộ định tuyến dừng khi một tuyến đường được khớp, bạn chỉ cần trả về giá trị trong cuộc gọi lại của mình hoặc dừng thực thi theo cách thủ công (sử dụng 68, v.v.) hoặc đơn giản bằng cách trả về kết quả.Bất kỳ đối tượng được trả về nào thực hiện phương pháp ma thuật 69 cũng sẽ ngăn các tuyến đường khác được hiển thị.Nếu bạn muốn bộ định tuyến chỉ thực hiện một tuyến đường cho mỗi yêu cầu, bạn có thể vô hiệu hóa nhiều kết xuất tuyến đường. Sử dụng bộ định tuyến trên các con đường phụVui lòng tham khảo thiết lập một phần đường dẫn cơ sở tùy chỉnh của tài liệu. Gỡ lỗiPhần này sẽ chỉ cho bạn cách viết các bài kiểm tra đơn vị cho bộ định tuyến, xem thông tin gỡ lỗi hữu ích và trả lời một số câu hỏi thường gặp. Nó cũng sẽ bao gồm cách báo cáo bất kỳ vấn đề nào bạn có thể gặp phải. Tạo các bài kiểm tra đơn vịCách dễ nhất và nhanh nhất để gỡ lỗi bất kỳ vấn đề nào với bộ định tuyến, là tạo ra một bài kiểm tra đơn vị đại diện cho vấn đề bạn đang gặp phải. Các thử nghiệm đơn vị sử dụng một lớp 70 đặc biệt, mô phỏng phương pháp yêu cầu và yêu cầu URL của trình duyệt.Lớp 70 có thể trả về đầu ra trực tiếp hoặc hiển thị một tuyến đường âm thầm. 9Sử dụng người trợ giúp testrouterTùy thuộc vào bài kiểm tra của bạn, bạn có thể sử dụng các phương thức dưới đây khi kết xuất các tuyến đường trong các bài kiểm tra đơn vị của bạn.
Thông tin gỡ lỗiThư viện có thể xuất thông tin gỡ lỗi, chứa thông tin như các tuyến đường tải, yêu cầu phân tích cú pháp, v.v. . Bạn có thể kích hoạt thông tin gỡ lỗi bằng cách gọi phương pháp bắt đầu thay thế. Ví dụ dưới đây sẽ bắt đầu định tuyến một mảng trả lại với thông tin gỡ lỗi Example: 0Ví dụ trên sẽ cung cấp cho bạn một đầu ra chứa:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
|