lớp Bộ định tuyến {
public static function route[Request $request] {
$controllerName = $request->getController[] . 'Controller';
$methodName = $request->getMethod[];
$args = $request->getArgs[];
if[is_readable[CONTROLLERS . $controllerName . '.php']] {
$controller = new $controllerName;
$method = [is_callable[array[$controller, $methodName]]] ? $methodName : 'main';
if[!empty[$args]] {
call_user_func_array[array[$controller, $method], $args];
} else {
call_user_func[array[$controller, $method]];
}
return;
}
throw new Exception['wrong_route'];
}
}
bài 05. Tự xây dựng mô hình MVC trong PHP – Phần 5. tuyến đường
- Hoàng An
- 25/03/2021
- 0
- Lập trình PHP
Trong video lần này mình chia sẻ cho các bạn từng bước xây dựng mô hình MVC trong PHP
Để xây dựng được mô hình MVC trong PHP bạn cần có những kiến thức căn bản sau
- PHP base
- Kiến thức về Viết lại URL
- Biểu thức chính quy [Regular Expressions]
- Lập trình hướng đối tượng [OOP]
- Từng trải qua dự án theo mô-đun hướng cấu hình, hướng hàm, hướng cấu trúc [Code thuần]
Video này là phần 5 trong loạt video về MVC PHP
- Build route
- Tối ưu load Controllers trong thư mục
Bấm để đánh giá bài viết này
[Tổng cộng. 0 Trung bình. 0 ]
lập trình php mô hình mvcmvc php mvc trong php php cơ bản xây dựng mvcxây dựng mvc trong php
Lớp MVC Router
[là một phần của Bộ điều khiển phía trước rộng hơn] chia nhỏ URL của yêu cầu HTTP--cụ thể là thành phần đường dẫn [và có khả năng là chuỗi truy vấn]
Router
cố gắng khớp một hoặc hai phần đầu tiên của thành phần đường dẫn với một tổ hợp tuyến đường tương ứng [Controller
/ Hành động [phương thức] hoặc chỉ một Controller
thực thi một hành động mặc định [phương thức]
Một hành động, hoặc mệnh lệnh, chỉ đơn giản là một phương thức của một Controller
cụ thể
Thường có một
`/` // Should take you to the home page / HomeController by default
`''` // Should take you to the home page / HomeController by default
`/gibberish&^&*^&*%#&[*$%&*#` // Reject
1 và nhiều con của Controller
, một con cho mỗi trang web [nói chung]Một số người có thể nói rằng Router
cũng chuyển đối số cho phương thức của Controller
mong muốn, nếu có trong URL
Ghi chú. Những người theo chủ nghĩa thuần túy lập trình hướng đối tượng, tuân theo Nguyên tắc Trách nhiệm Đơn lẻ, có thể lập luận rằng việc định tuyến các thành phần của một URL và gửi một lớp Controller
là hai trách nhiệm riêng biệt. Trong trường hợp đó, một lớp
`/` // Should take you to the home page / HomeController by default
`''` // Should take you to the home page / HomeController by default
`/gibberish&^&*^&*%#&[*$%&*#` // Reject
2 sẽ thực sự khởi tạo lớp Controller
và chuyển một trong các phương thức của nó bất kỳ đối số nào bắt nguồn từ yêu cầu HTTP của máy kháchví dụ 1. Controller
, nhưng không có hành động hay tranh luận
`/` // Should take you to the home page / HomeController by default
`''` // Should take you to the home page / HomeController by default
`/gibberish&^&*^&*%#&[*$%&*#` // Reject
5 Trên một yêu cầu GET, điều này có thể hiển thị một biểu mẫuKiểm soát viên = Hợp đồng
Hành động = Mặc định [thường là phương thức
`/` // Should take you to the home page / HomeController by default
`''` // Should take you to the home page / HomeController by default
`/gibberish&^&*^&*%#&[*$%&*#` // Reject
6]=======================
ví dụ 2. Controller
và hành động, nhưng không có đối số
`/` // Should take you to the home page / HomeController by default
`''` // Should take you to the home page / HomeController by default
`/gibberish&^&*^&*%#&[*$%&*#` // Reject
8 Trên một yêu cầu POST, điều này có thể kích hoạt xác thực phía máy chủ và cố gắng gửi tin nhắnKiểm soát viên = Hợp đồng
Hành động = gửi
=======================
ví dụ 3. Controller
, hành động và lập luận
Router
0 Trên một yêu cầu POST, điều này có thể kích hoạt xác thực phía máy chủ và cố gắng gửi tin nhắn. Tuy nhiên, trong trường hợp này, có thể JavaScript không hoạt động. Do đó, để hỗ trợ quá trình xuống cấp nhẹ nhàng, bạn có thể yêu cầu Router
1 sử dụng một Router
2 hỗ trợ vẽ lại màn hình và phản hồi bằng tiêu đề HTTP của Router
3, thay vì Router
4. Router
5 sẽ được chuyển thành đối số cho Router
6. Lưu ý, ví dụ về Router
5 của tôi hoàn toàn tùy tiện và được tạo ra, nhưng tôi nghĩ nó phù hợp với hóa đơn
Kiểm soát viên = Hợp đồng
Hành động = gửi
Đối số = Router
8 // Có, truyền đối số vào một mảng
Một lớp Router
khởi tạo lớp con cụ thể được yêu cầu, Controller
, gọi phương thức được yêu cầu từ thể hiện của bộ điều khiển và chuyển các đối số của phương thức điều khiển đó [nếu có]
1] Lớp Router
của bạn trước tiên nên kiểm tra xem có một Controller
cụ thể nào mà nó có thể khởi tạo hay không [sử dụng tên như trong URL, cộng với từ "Trình điều khiển"]. Nếu tìm thấy bộ điều khiển, hãy kiểm tra sự hiện diện của phương thức được yêu cầu [hành động]
2] Nếu Router
không thể tìm và tải PHP cần thiết trong thời gian chạy [nên sử dụng trình tải tự động] để khởi tạo một con Controller
cụ thể, thì nó nên kiểm tra một mảng [thường được tìm thấy trong tên lớp khác Router
5] để xem URL được yêu cầu có khớp không . Một bộ xương cơ bản của một lớp Router
5 sau
Ghi chú. Router
7 = Không, hoặc nhiều hơn, bất kỳ ký tự nào, không chụp
class Route
{
private $routes = [
['url' => 'nieuws/economie/.*?', // regular expression.
'controller' => 'news',
'action' => 'economie'],
['url' => 'weerbericht/locatie/.*?', // regular expression.
'controller' => 'weather',
'action' => 'location']
];
public function __contstruct[]
{
}
public function getRoutes[]
{
return $this->routes;
}
}
Tại sao sử dụng một biểu thức chính quy?
Router
8, trong đó param[x] có thể là bất cứ thứ gì
Cảnh báo. Bạn nên thay đổi dấu phân cách mẫu biểu thức chính quy mặc định ['/'] khi nhắm mục tiêu dữ liệu chứa dấu phân cách mẫu [trong trường hợp này, dấu gạch chéo lên '/'. Hầu hết mọi ký tự URL không hợp lệ sẽ là một lựa chọn tuyệt vời
Một phương thức của lớp Router
sẽ lặp qua mảng Controller
0 để xem liệu có biểu thức chính quy khớp giữa URL mục tiêu và giá trị Controller
1 được liên kết với chỉ mục Controller
2 cấp 2 hay không. Nếu tìm thấy kết quả trùng khớp, thì Router
sẽ biết cụ thể Controller
nào sẽ khởi tạo và phương thức tiếp theo để gọi. Các đối số sẽ được truyền cho phương thức khi cần thiết