Hướng dẫn php router github - php router github

simple-router

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í.

Show

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:

SimpleRouter::get('/', function() {
    return 'Hello world';
});

Hỗ trợ dự án

Nế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 đầu
    • Ghi chú
    • Yêu cầu
    • Đặc trưng
    • Cài đặt
      • Thiết lập Apache
      • Thiết lập nginx
      • Thiết lập IIS
      • Cấu hình
      • Chức năng trợ giúp
  • Tuyến đường
    • Định tuyến cơ bản
      • Lớp gợi ý
      • Phương pháp có sẵn
      • Nhiều http-verbs
    • Tham số tuyến đường
      • Tham số cần thiết
      • Tham số tùy chọn
      • Các ràng buộc biểu thức chính quy
      • Trò chơi biểu thức thường xuyên
      • Tùy chỉnh regex cho các tham số phù hợp
    • Các tuyến đường được đặt tên
      • Tạo URL cho các tuyến đường được đặt tên
    • Nhóm bộ định tuyến
      • Phần mềm trung gian
      • Không gian tên
      • Subdomain-routing
      • Tiền tố định tuyến
    • Nhóm một phần
    • Hình thức giả mạo phương pháp
    • Truy cập tuyến đường hiện tại
    • Những ví dụ khác
  • CSRF-protection
    • Thêm CSRF-Verifier
    • Nhận CSRF-Token
    • CSRF-Verifier tùy chỉnh
    • Mã thông báo tùy chỉnh
  • Middle Wares
    • Thí dụ
  • Ngoại lệ
    • Xử lý 404, 403 và các lỗi khác
    • Sử dụng trình xử lý ngoại lệ tùy chỉnh
      • Ngăn chặn sự hợp nhất của người làm việc ngoại lệ phụ huynh
  • URL
    • Nhận URL hiện tại
    • Nhận theo tên (tuyến đường đơn)
    • Nhận theo tên (tuyến điều khiển)
    • Nhận theo lớp
    • 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ên
    • Nhận URL Bộ điều khiển REST/Tài nguyên
    • Thao tác URL
    • Thủ thuật URL hữu ích
  • Đầu vào & tham số
    • Sử dụng lớp đầu vào để quản lý các tham số
      • Nhận giá trị tham số đơn
      • Nhận đối tượng tham số
      • Quản lý tập tin
      • Nhận tất cả các tham số
      • Kiểm tra xem các tham số có tồn tại không
  • Sự kiện
    • Các sự kiện có sẵn
    • Đăng ký sự kiện mới
    • Sự kiện tùy chỉnh
  • Nâng cao
    • Tắt nhiều tuyến đường
    • Hạn chế quyền truy cập vào IP
    • Đặt đường dẫn cơ sở tùy chỉnh
    • Viết lại URL
      • Thay đổi tuyến đường hiện tại
      • BootManager: Đang tải các tuyến đường động
      • Thêm các tuyến đường bằng tay
    • Người tải lớp tùy chỉnh
      • Tích hợp với PHP-di
    • Thông số
    • Mở rộng
  • Giúp đỡ và hỗ trợ
    • Các vấn đề và sửa chữa phổ biến
      • Nhiều tuyến đường phù hợp? Cái nào có ưu tiên?
      • Tham số sẽ không khớp hoặc tuyến không hoạt động với các ký tự đặc biệt
      • Sử dụng bộ định tuyến trên các con đường phụ
    • Gỡ lỗi
      • Tạo các bài kiểm tra đơn vị
      • Thông tin gỡ lỗi
      • Điểm chuẩn và log-info
    • Báo cáo một vấn đề mới
      • Thủ tục báo cáo một vấn đề mới
      • Mẫu phát hành
    • Phản hồi và phát triển
      • Hướng dẫn phát triển đóng góp
  • Tín dụng
    • Trang web
    • Giấy phép

Bắt đầu

Thê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.

composer require pecee/simple-router

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

/index.php/test/mypage.php
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:

  • Làm thế nào để thiết lập một giải pháp phù hợp với nhu cầu của bạn. Đây là một bản demo cơ bản để giúp bạn bắt đầu.
  • Sự hiểu biết về MVC; bao gồm bộ điều khiển, đường giữa hoặc ngoại lệ.
  • Làm thế nào để tích hợp vào các khung của bên thứ ba.

Những gì chúng tôi bao gồm:

  • Làm thế nào để đứng dậy và chạy nhanh - từ đầu.
  • Làm thế nào để có được các trình ngoại lệ, các trung bình và bộ điều khiển hoạt động.
  • Làm thế nào để thiết lập máy chủ web của bạn.

Yêu cầu

  • Php 7.1 trở lên (Phiên bản 3.x trở xuống hỗ trợ Php 5.5+)
  • Phần mở rộng PHP JSON được bật.

Đặc trưng

  • Định tuyến cơ bản (
    /index.php/test/mypage.php
    
    5,
    /index.php/test/mypage.php
    
    6,
    /index.php/test/mypage.php
    
    7,
    /index.php/test/mypage.php
    
    8,
    /index.php/test/mypage.php
    
    9,
    
    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ới sự hỗ trợ cho nhiều động từ tùy chỉnh.
  • Các ràng buộc biểu thức chính quy cho các tham số.
  • Các tuyến đường được đặt tên.
  • Tạo URL đến các tuyến đường.
  • Nhóm tuyến đường.
  • Phần mềm trung gian (các lớp chặn trước khi tuyến được hiển thị).
  • Namespaces.
  • Tiền tố định tuyến.
  • Bảo vệ CSRF.
  • Tham số tùy chọn
  • Các ràng buộc biểu thức chính quy
  • Trò chơi biểu thức thường xuyên
  • Tùy chỉnh regex cho các tham số phù hợp
  • Các tuyến đường được đặt tên
  • Tạo URL cho các tuyến đường được đặt tên

Cài đặt

  1. Nhóm bộ định tuyến

composer require pecee/simple-router

Thiết lập nginx

Nế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.

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

Thiết lập Apache

Khô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ụ .htaccess

Dướ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
composer require pecee/simple-router
00 của bạn (xem phần Cấu hình bên dưới).

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1

Thiết lập IIS

Trên IIS, bạn phải thêm một số dòng tệp

composer require pecee/simple-router
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
composer require pecee/simple-router
03 hay tải xuống và cài đặt chúng từ trang web Microsoft không.

Ví dụ Web.Config

Dưới đây là một ví dụ về tệp

composer require pecee/simple-router
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

composer require pecee/simple-router
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
composer require pecee/simple-router
00 của bạn (xem phần Cấu hình bên dưới). Nếu tệp
composer require pecee/simple-router
01 đã tồn tại, hãy thêm phần
composer require pecee/simple-router
09 bên trong nhánh
composer require pecee/simple-router
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

composer require pecee/simple-router
11 trong dự án của mình, bạn có thể nhận được
composer require pecee/simple-router
12 (không tìm thấy).

Để thêm

composer require pecee/simple-router
11 vào danh sách IIS bỏ qua, hãy thêm dòng sau vào nhóm
composer require pecee/simple-router
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

composer require pecee/simple-router
15, bạn sẽ nhận được
composer require pecee/simple-router
16 như một phần của giá trị trả về.

Example:

/index.php/test/mypage.php

Cấu hình

Tạo một tệp mới, đặt tên cho nó

composer require pecee/simple-router
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

composer require pecee/simple-router
00 của bạn yêu cầu
composer require pecee/simple-router
17 mới được tạo của bạn và gọi phương thức
composer require pecee/simple-router
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

composer require pecee/simple-router
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

composer require pecee/simple-router
00 cơ 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();

Chức năng trợ giúp

Chú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

composer require pecee/simple-router
23 mà chúng tôi đã đưa vào thư viện này.

composer require pecee/simple-router
0


Tuyến đường

Bạn có nhớ tệp

composer require pecee/simple-router
17 bạn yêu cầu trong
composer require pecee/simple-router
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ản

Dướ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

composer require pecee/simple-router
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:

composer require pecee/simple-router
2

Phươ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:

composer require pecee/simple-router
3

Nhiề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

composer require pecee/simple-router
27.

composer require pecee/simple-router
4

Chúng tôi đã tạo một phương thức đơn giản phù hợp với

/index.php/test/mypage.php
5 và
/index.php/test/mypage.php
6 được sử dụng phổ biến nhất:

composer require pecee/simple-router
5

Tham số tuyến đường

Tham số cần thiết

Bạ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.

composer require pecee/simple-router
6

Bạ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:

composer require pecee/simple-router
7

Lưu ý: Các tham số tuyến luôn được bao bọc trong vòng niềng răng

composer require pecee/simple-router
30
composer require pecee/simple-router
31 và nên bao gồm các ký tự chữ cái. Các tham số tuyến chỉ có thể chứa một số ký tự nhất định như
composer require pecee/simple-router
32,
composer require pecee/simple-router
33,
composer require pecee/simple-router
34,
composer require pecee/simple-router
35 và
composer require pecee/simple-router
36. Nếu tuyến đường của bạn chứa các ký tự khác, vui lòng xem Regex tùy chỉnh để biết các tham số phù hợp.
Route parameters are always encased within
composer require pecee/simple-router
30
composer require pecee/simple-router
31 braces and should consist of alphabetic characters. Route parameters can only contain certain characters like
composer require pecee/simple-router
32,
composer require pecee/simple-router
33,
composer require pecee/simple-router
34,
composer require pecee/simple-router
35 and
composer require pecee/simple-router
36. If your route contain other characters, please see Custom regex for matching parameters.

Tham số tùy chọn

Thỉ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:

composer require pecee/simple-router
8

Các 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 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ố:

composer require pecee/simple-router
9

Trò chơi biểu thức thường xuyên

Bạ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:

composer require pecee/simple-router
37 về cơ bản chỉ khớp với
composer require pecee/simple-router
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:

composer require pecee/simple-router
39,
composer require pecee/simple-router
40
composer require pecee/simple-router
39,
composer require pecee/simple-router
40

Sẽ không khớp:

composer require pecee/simple-router
38
composer require pecee/simple-router
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
0

Tùy chỉnh regex cho các tham số phù hợp

Theo mặc định đơn giản-Php-Router sử dụng biểu thức chính quy

composer require pecee/simple-router
42. Nó sẽ khớp với
composer require pecee/simple-router
32,
composer require pecee/simple-router
33,
composer require pecee/simple-router
34,
composer require pecee/simple-router
35 và
composer require pecee/simple-router
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

composer require pecee/simple-router
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

composer require pecee/simple-router
49 (
composer require pecee/simple-router
33,
composer require pecee/simple-router
32,
composer require pecee/simple-router
35,
composer require pecee/simple-router
36,
composer require pecee/simple-router
34,
composer require pecee/simple-router
55,
composer require pecee/simple-router
56,
composer require pecee/simple-router
57)

composer require pecee/simple-router
1

Bạ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
2

Các 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 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
3

Bạ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
4

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

Khi 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

composer require pecee/simple-router
58 (xem phần trợ lý):

composer require pecee/simple-router
5

Nế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

composer require pecee/simple-router
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ến

Cá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

composer require pecee/simple-router
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
7

Không gian tên

Mộ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ố

composer require pecee/simple-router
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ư

composer require pecee/simple-router
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
composer require pecee/simple-router
63 khi bắt đầu cuộc gọi lại.

composer require pecee/simple-router
8

Bạ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
9

Subdomain-routing

Cá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

composer require pecee/simple-router
64 trên mảng thuộc tính nhóm:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
0

Tiền tố định tuyến

Thuộc tính nhóm

composer require pecee/simple-router
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
composer require pecee/simple-router
66:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
1

Bạn cũng có thể sử dụng các tham số trong các nhóm của mình:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
2

Nhóm một phần

Cá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

composer require pecee/simple-router
67 không tìm thấy URL cho các tuyến được thêm vào trong trước khi nhóm một phần được khớp và được hiển thị. Use partial groups with caution as routes added within are only rendered and available once the url of the partial-group has matched. This can cause
composer require pecee/simple-router
67 not to find urls for the routes added within before the partial-group has been matched and is rendered.

Example:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
3

Hình thức giả mạo phương pháp

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

/index.php/test/mypage.php
7,
/index.php/test/mypage.php
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
/index.php/test/mypage.php
7,
/index.php/test/mypage.php
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
composer require pecee/simple-router
74 ẩn vào biểu mẫu. Giá trị được gửi với trường
composer require pecee/simple-router
74 sẽ được sử dụng làm phương thức yêu cầu HTTP:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
4

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

Bạ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:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
5

Những ví dụ khác

Bạn có thể tìm thấy nhiều ví dụ khác trong tệp ví dụ

composer require pecee/simple-router
17 bên dưới:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
6


Bảo vệ CSRF

Bất kỳ hình thức nào đăng lên các tuyến

/index.php/test/mypage.php
6,
/index.php/test/mypage.php
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

composer require pecee/simple-router
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

composer require pecee/simple-router
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-Verifier

Khi 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

composer require pecee/simple-router
17 của bạn:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
7

Nhận CSRF-Token

Khi đă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:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
8

Tên/khóa mặc định cho trường đầu vào là

composer require pecee/simple-router
83 và được xác định trong hằng số
composer require pecee/simple-router
84 trong lớp
composer require pecee/simple-router
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 "

composer require pecee/simple-router
83".

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
9

CSRF-Verifier tùy chỉnh

Tạo một lớp mới và mở rộng lớp phần mềm trung gian

composer require pecee/simple-router
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

composer require pecee/simple-router
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
composer require pecee/simple-router
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:

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1
0

Nhà cung cấp mã thông báo tùy chỉnh

Theo mặc định,

composer require pecee/simple-router
80 sẽ sử dụng
composer require pecee/simple-router
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

composer require pecee/simple-router
92.

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1
1

Tiếp theo, bạn cần đặt triển khai

composer require pecee/simple-router
92 tùy chỉnh của mình trên lớp
composer require pecee/simple-router
80 trong tệp tuyến của bạn:

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1
2


Middle Wares

MiddleWares 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

composer require pecee/simple-router
95.

Thí dụ

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1
3


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

composer require pecee/simple-router
96.

Xử lý 404, 403 và các lỗi khác

Nế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

composer require pecee/simple-router
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

composer require pecee/simple-router
98 nếu xảy ra
composer require pecee/simple-router
12 (404). Mã phải được đặt trong tệp chứa các tuyến đường của bạn.

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1
4

Ví 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
composer require pecee/simple-router
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:

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1
5

Sử 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).

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1
6

Bạ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.

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1
7

Ngăn chặn sự hợp nhất của người làm việc ngoại lệ phụ huynh

Theo 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.

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1
8


URL

Theo 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

composer require pecee/simple-router
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.

composer require pecee/simple-router
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ại

Nó 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:

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1
9

Nhậ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ớp

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>
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ê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>
3

Nhận URL Bộ điều khiển REST/Tài nguyê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>
4

Thao tác URL

Bạ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 ích

Gọi

composer require pecee/simple-router
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
composer require pecee/simple-router
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ố đơn

composer 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 trừ khi các tham số được nhóm lại với nhau, trong trường hợp đó, nó sẽ trả về một
composer require pecee/simple-router
36 của các giá trị.
This function returns a
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.


0

Nhận tham số

composer require pecee/simple-router
28 cụ thể làm đối tượng
composer require pecee/simple-router
37:

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.


1

Nhận tham số

composer require pecee/simple-router
28 cụ thể làm đối tượng
composer require pecee/simple-router
37:

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.


2

Nhận tham số

composer require pecee/simple-router
29 cụ thể là đối tượng
composer require pecee/simple-router
51:

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.


3

Quản lý tập tin


4

Nhận tất cả các tham số


5

Tấ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
    56 - Trả về chỉ mục/khóa của đầu vào.
  • composer require pecee/simple-router
    57 - Đặt chỉ mục/khóa của đầu vào.
  • composer require pecee/simple-router
    58 - Trả về một tên thân thiện với con người cho đầu vào (công ty_name sẽ là tên công ty, v.v.).
  • composer require pecee/simple-router
    59 - Đặt tên thân thiện với con người cho đầu vào (công ty_name sẽ là tên công ty, v.v.).
  • composer require pecee/simple-router
    60 - Trả về giá trị của đầu vào.
  • composer require pecee/simple-router
    61 - Đặt giá trị của đầu vào.

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ư:

  • composer require pecee/simple-router
    63 - Nhận tên tệp.
  • composer require pecee/simple-router
    64 - Nhận tệp tạm thời.
  • composer require pecee/simple-router
    65 - Nhận kích thước tệp.
  • composer require pecee/simple-router
    66 - Di chuyển tệp đến đích.
  • composer require pecee/simple-router
    67 - Nhận nội dung tệp.
  • composer require pecee/simple-router
    68 - Nhận loại MIME cho tệp.
  • composer require pecee/simple-router
    69 - Nhận lỗi tải lên tệp.
  • composer require pecee/simple-router
    70 - Trả về
    composer require pecee/simple-router
    71 nếu xảy ra lỗi trong khi tải lên (nếu
    composer require pecee/simple-router
    72 không phải là 0).
  • composer require pecee/simple-router
    73 - Trả về mảng thô

Kiểm tra xem các tham số có tồn tại không

Bạ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:


6

Sự kiện

Phầ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ẵn

Phầ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.

TênLập luận đặc biệtSự mô tả
composer require pecee/simple-router
80
-Hỏa hoạn khi một sự kiện được kích hoạt.
composer require pecee/simple-router
81
-Hỏa hoạn khi một sự kiện được kích hoạt.
composer require pecee/simple-router
81
Hỏa hoạn khi bộ định tuyến được khởi tạo và trước khi các tuyến đường được tải.
composer require pecee/simple-router
82
composer require pecee/simple-router
83
Hỏa hoạn khi tất cả các tuyến đường đã được tải và hiển thị, ngay trước khi đầu ra được trả lại.
composer require pecee/simple-router
86
composer require pecee/simple-router
84
composer require pecee/simple-router
85
composer require pecee/simple-router
86
Hỏa hoạn khi tuyến đường được thêm vào bộ định tuyến.
composer require pecee/simple-router
86 là đúng khi các tuyến phụ được hiển thị.
composer require pecee/simple-router
90
composer require pecee/simple-router
88
composer require pecee/simple-router
89
composer require pecee/simple-router
90
Các vụ cháy khi một url-rechrite là và ngay trước các tuyến đường được khởi tạo lại.
composer require pecee/simple-router
91
composer require pecee/simple-router
92
Hỏa hoạn khi bộ định tuyến đang khởi động. Điều này xảy ra ngay trước khi người quản lý khởi động được hiển thị và trước khi bất kỳ tuyến đường nào được tải.
composer require pecee/simple-router
95
composer require pecee/simple-router
93
composer require pecee/simple-router
92
composer require pecee/simple-router
95
Hỏa hoạn trước khi một người quản lý khởi động được thực hiện.
composer require pecee/simple-router
96
composer require pecee/simple-router
97
Hỏa hoạn khi bộ định tuyến sắp tải tất cả các tuyến đường.
composer require pecee/simple-router
98
composer require pecee/simple-router
99
Các vụ cháy bất cứ khi nào phương thức
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
00 được gọi trong
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
01. Điều này thường xảy ra khi bộ định tuyến cố gắng tìm các tuyến đường có chứa một URL nhất định, thường là sau sự kiện
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
02.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
05
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
06
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
03
composer require pecee/simple-router
99
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
05____
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
06
Các vụ cháy bất cứ khi nào phương thức
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
07 hoặc hàm ____ 158-helper được gọi và bộ định tuyến cố gắng tìm tuyến đường.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
09
composer require pecee/simple-router
85
Các vụ cháy bất cứ khi nào phương thức
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
07 hoặc hàm ____ 158-helper được gọi và bộ định tuyến cố gắng tìm tuyến đường.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
09
composer require pecee/simple-router
85
Bắn khi một tuyến đường được khớp và hợp lệ (loại yêu cầu chính xác, v.v.). và trước khi tuyến đường được đưa ra.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
15
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
11
Hỏa hoạn trước khi một tuyến đường được thực hiện.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
13
composer require pecee/simple-router
04
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
15
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
14
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
15
Hỏa hoạn khi bộ định tuyến đang tải người cầm tay ngoại lệ.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
16
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
22
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
14
composer require pecee/simple-router
04
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
15
Hỏa hoạn trước khi bộ định tuyến đang tạo ra một tay cầm ngoại lệ.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
20
composer require pecee/simple-router
85
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
22

Các đám cháy trước khi dây giữa cho một tuyến đường được thực hiện.

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
23

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
24

Example:

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
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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
composer require pecee/simple-router
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à

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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.


8


Nâng cao

Tắt nhiều tuyến đường

Theo 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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
33 trong tệp
composer require pecee/simple-router
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 IP

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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
35.

Lớp

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
35 chứa hai thuộc tính
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
38 và
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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

composer require pecee/simple-router
89 để hạn chế quyền truy cập vào một loạt các IPS.


9

Bạ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.


0

Trong 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 URL

Thay đổ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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
44 thay vì gọi trực tiếp lớp
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
45.


1

BootManager: Đ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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
46 tải tuyến đường
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
47 mà bộ định tuyến biết, bởi vì nó được xác định trong tệp
composer require pecee/simple-router
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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
49. Lớp này sẽ được tải trước bất kỳ quy tắc nào khác trong
composer require pecee/simple-router
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
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
46).


2

Cá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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
47 thay vì
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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

composer require pecee/simple-router
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
composer require pecee/simple-router
17 của bạn.


3

Thêm các tuyến đường bằng tay

Lớp

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
01 của riêng bạn, ví dụ này là dành cho bạn.


4

Trình tải lớp tùy chỉnh

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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
60.

Example:


5

Tiếp theo, chúng tôi cần định cấu hình

composer require pecee/simple-router
17 của chúng tôi để bộ định tuyến sử dụng lớp
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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
composer require pecee/simple-router
17 của bạn.


6

Tích hợp với PHP-di

Hỗ 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:


7

Thô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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
01 riêng được kế thừa từ lớp
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
57. Điều này cho phép khung để thêm chức năng tùy chỉnh như tải tệp
composer require pecee/simple-router
17 tùy chỉnh hoặc thêm thông tin gỡ lỗi, v.v.


8


Giú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ến

Phầ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ệt

Mọ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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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ỗi

Phầ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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
70 có thể trả về đầu ra trực tiếp hoặc hiển thị một tuyến đường âm thầm.


9

Sử dụng người trợ giúp testrouter

Tù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.

Phương phápSự mô tả
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
72
Sẽ kết xuất tuyến đường mà không trả lại bất cứ điều gì. Các trường hợp ngoại lệ sẽ được ném và bộ định tuyến sẽ được đặt lại tự động.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
73
Sẽ hiển thị tuyến đường và trả về bất kỳ giá trị nào mà tuyến có thể xuất ra. Đặt lại thủ công theo yêu cầu bằng cách gọi
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
74.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
75
Sẽ hiển thị tuyến đường mà không cần đặt lại bộ định tuyến. Hữu ích nếu bạn cần có được tuyến đường, tham số, vv từ bộ định tuyến. Đặt lại thủ công theo yêu cầu bằng cách gọi
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
74.

Thông tin gỡ lỗi

Thư 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:

/index.php/test/mypage.php
0

Ví dụ trên sẽ cung cấp cho bạn một đầu ra chứa:

Chìa khóaSự mô tả
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
72
Sẽ kết xuất tuyến đường mà không trả lại bất cứ điều gì. Các trường hợp ngoại lệ sẽ được ném và bộ định tuyến sẽ được đặt lại tự động.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
73
Sẽ hiển thị tuyến đường và trả về bất kỳ giá trị nào mà tuyến có thể xuất ra. Đặt lại thủ công theo yêu cầu bằng cách gọi
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
74.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
75
Sẽ hiển thị tuyến đường mà không cần đặt lại bộ định tuyến. Hữu ích nếu bạn cần có được tuyến đường, tham số, vv từ bộ định tuyến. Đặt lại thủ công theo yêu cầu bằng cách gọi
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
74.
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
Ví dụ trên sẽ cung cấp cho bạn một đầu ra chứa:Chìa khóa
composer require pecee/simple-router
58
Yêu cầu phân tích cú pháp-Uri. URL này sẽ phù hợp với URL trong trình duyệt.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
78
Phương thức yêu cầu trình duyệt (ví dụ:
/index.php/test/mypage.php
5,
/index.php/test/mypage.php
6,
/index.php/test/mypage.php
7,
/index.php/test/mypage.php
8,

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.).
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
84
Máy chủ trang web (ví dụ:
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
85).
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
86
Danh sách tất cả các tuyến đường khớp với
composer require pecee/simple-router
58 và đã được hiển thị/tải.
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
88
Tất cả các tuyến có sẵn
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
89
Tất cả các bootmanagers có sẵn

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
90

Lớp CSRFverifier

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
91

Example:

/index.php/test/mypage.php
1

Danh sách các tin nhắn gỡ lỗi/nhật ký từ bộ định tuyến.

Example:

/index.php/test/mypage.php
2

location / { try_files $uri $uri/ /index.php?$query_string; } 92

Đầu ra gọi lại từ bộ định tuyến.

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
93

Phiên bản của bộ định tuyến đơn giản mà bạn đang sử dụng.

  1. location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    94
  2. Thêm một tiêu đề mô tả các vấn đề của bạn trong càng ít từ càng tốt.
  3. Sao chép và dán mẫu bên dưới trong mô tả về vấn đề của bạn và thay thế từng bước bằng thông tin của riêng bạn. Nếu bước không liên quan đến vấn đề của bạn, bạn có thể xóa nó.

Mẫu phát hành

Sao chép và dán mẫu bên dưới vào mô tả về vấn đề mới của bạn và thay thế nó bằng thông tin của riêng bạn.

Bạn có thể kiểm tra phần Thông tin gỡ lỗi để xem cách tạo bản gỡ lỗi.

/index.php/test/mypage.php
3

Hãy nhớ rằng một vấn đề chi tiết hơn- mô tả và gỡ lỗi-INFO có thể hút để viết, nhưng nó sẽ giúp người khác hiểu- và giải quyết vấn đề của bạn mà không cần thông tin.

Lưu ý: Vui lòng càng chi tiết trong mô tả khi tạo ra một vấn đề mới. Điều này sẽ giúp người khác dễ hiểu hơn- và giải quyết vấn đề của bạn. Cung cấp các bước cần thiết để tái tạo lỗi trong mô tả của bạn, thêm thông tin gỡ lỗi hữu ích, vv sẽ giúp người khác nhanh chóng giải quyết vấn đề bạn đang báo cáo. please be as detailed as possible in the description when creating a new issue. This will help others to more easily understand- and solve your issue. Providing the necessary steps to reproduce the error within your description, adding useful debugging info etc. will help others quickly resolve the issue you are reporting.

Phản hồi và phát triển

Nếu thư viện thiếu một tính năng mà bạn cần trong dự án của mình hoặc nếu bạn có phản hồi, chúng tôi rất muốn nghe từ bạn. Hãy để lại cho chúng tôi phản hồi bằng cách tạo ra một vấn đề mới.

Trải qua một vấn đề?

Vui lòng tham khảo phần trợ giúp và hỗ trợ của chúng tôi trong tài liệu trước khi báo cáo một vấn đề mới.

Hướng dẫn phát triển đóng góp

  • Vui lòng cố gắng làm theo hướng dẫn Codestyle PSR-2.

  • Vui lòng tạo các yêu cầu kéo của bạn đến cơ sở phát triển phù hợp với số phiên bản bạn muốn thay đổi. Ví dụ: khi đẩy các thay đổi sang phiên bản 3, yêu cầu kéo nên sử dụng cơ sở/nhánh

    RewriteEngine on
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-l
    RewriteRule ^(.*)$ index.php/$1
    
    02.

  • Tạo các mô tả chi tiết cho các cam kết của bạn, vì chúng sẽ được sử dụng trong Changelog cho các bản phát hành mới.

  • Khi thay đổi chức năng hiện có, vui lòng đảm bảo rằng các bài kiểm tra đơn vị hoạt động.

  • Khi thêm công cụ mới, vui lòng nhớ thêm các bài kiểm tra đơn vị mới cho chức năng.


Tín dụng

Trang web

Đây là một số trang web sử dụng dự án bộ định tuyến đơn giản trong sản xuất.

  • holla.dk
  • ninjaimg.com
  • bookandbegin.com
  • dscuz.com

Giấy phép

Giấy phép MIT (MIT)

Bản quyền (c) 2016 Simon Sessingø / Simple-php-Router

Quyền được cấp, miễn phí, cho bất kỳ ai có được bản sao phần mềm này và các tệp tài liệu liên quan ("phần mềm"), để giải quyết phần mềm mà không bị hạn chế, bao gồm không giới hạn quyền sử dụng, sao chép, sửa đổi, hợp nhất , Xuất bản, Phân phối, Bán cấp và/hoặc Bán các bản sao của phần mềm và cho phép những người mà phần mềm được cung cấp để làm như vậy, tuân theo các điều kiện sau:

Thông báo bản quyền trên và Thông báo quyền này sẽ được bao gồm trong tất cả các bản sao hoặc các phần đáng kể của phần mềm.

Phần mềm được cung cấp "như là", không có bảo hành dưới bất kỳ hình thức nào, rõ ràng hay ngụ ý, bao gồm nhưng không giới hạn trong các bảo đảm của thương mại, thể lực cho một mục đích cụ thể và không bị thiếu sót. Trong mọi trường hợp, các tác giả hoặc chủ bản quyền sẽ phải chịu trách nhiệm đối với bất kỳ khiếu nại, thiệt hại hoặc trách nhiệm nào khác, cho dù trong hành động của hợp đồng, tra tấn hay nói cách khác, phát sinh từ hoặc liên quan đến phần mềm hoặc việc sử dụng hoặc các giao dịch khác trong PHẦN MỀM.