Ví dụ PHP MVC không có khung ✅ Chi Tiết
Thủ Thuật về Ví dụ PHP MVC không còn khung 2022
Dương Thế Tùng đang tìm kiếm từ khóa Ví dụ PHP MVC không còn khung được Update vào lúc : 2022-12-18 09:45:09 . Với phương châm chia sẻ Mẹo về trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi Read Post vẫn ko hiểu thì hoàn toàn có thể lại Comment ở cuối bài để Ad lý giải và hướng dẫn lại nha.Bây giờ, đây không phải là một nền tảng chống khuôn khổ. Nó cũng không phải là một sự thúc đẩy của suy nghĩ không được phát minh ở đây. Rốt cuộc, tất cả chúng ta sẽ sử dụng một số trong những gói được viết bởi một số trong những nhà phát triển khung trong hướng dẫn này. Tôi không còn gì ngoài sự tôn trọng lớn đối với sự đổi mới đang ra mắt trong không khí đó
Nội dung chính Show- # PHP, Nó hoạt động và sinh hoạt giải trí ra làm sao?# Bộ điều khiển phía trước# Gói tự động tải và bên thứ ba# Tiêm phụ thuộc là gì?# Vùng chứa tiêm phụ thuộc# Phần mềm trung gian# Lộ trình# Người điều phối phần mềm trung gian# Chất kết dính giữ tất cả lại với nhau# Gửi phản hồi đúng cách# kết thúcTôi hoàn toàn có thể sử dụng PHP mà không cần framework không?Làm thế nào để sử dụng MVC trong PHP với ví dụ?Làm cách nào để tạo MVC riêng trong PHP?Làm cách nào để triển khai kiến trúc MVC trong PHP?
Đây không phải là về họ. Đây là về bạn. Đó là tạo cho bạn thời cơ để phát triển với tư cách là một nhà phát triển
Có lẽ quyền lợi lớn số 1 mà bạn sẽ thấy khi thao tác mà không còn khuôn khổ là nguồn kiến thức dồi dào về những gì đang ra mắt bên trong. Bạn hoàn toàn có thể thấy đúng chuẩn những gì đang xảy ra mà không cần nhờ vào phép thuật của khuôn khổ để xử lý mọi thứ cho bạn theo cách mà bạn không thể gỡ lỗi và không thực sự hiểu
Rất hoàn toàn có thể việc làm tiếp theo của bạn sẽ không mang lại sự xa xỉ khi khởi đầu một dự án công trình bất Động sản nghành xanh với khuôn khổ lựa chọn của bạn. Thực tế là hầu hết những việc làm PHP quan trọng, có mức giá trị marketing thương mại cao đều liên quan đến những ứng dụng hiện có. Và liệu ứng dụng đó đã có được xây dựng trong một khung hiện giờ đang được tương hỗ phổ biến như Laravel hay Symfony, một khung từ những ngày đã qua như CodeIgniter hay FuelPHP hay thậm chí là ứng dụng PHP thừa kế đang phổ biến một cách đáng thất vọng sử dụng “kiến trúc hướng gồm có”, xây dựng mà không còn khung
Trước đây, việc xây dựng mà không còn khung là một trận chiến trở ngại vất vả vì một số trong những loại khối mạng lưới hệ thống phải diễn giải và định tuyến những yêu cầu HTTP, gửi phản hồi HTTP và quản lý những phụ thuộc. Việc thiếu những tiêu chuẩn ngành nhất thiết nghĩa là, ít nhất, những thành phần đó của một khuôn khổ được link ngặt nghèo với nhau. Nếu bạn không khởi đầu với một khuôn khổ, thì ở đầu cuối bạn sẽ tự mình xây dựng một khuôn khổ
Nhưng ngày này, nhờ vào tất cả những việc làm tự động tải và kĩ năng tương tác được thực hiện bởi PHP-FIG, việc xây dựng mà không còn khung không nghĩa là bạn phải tự mình xây dựng tất cả. Có rất nhiều gói tuyệt vời, hoàn toàn có thể tương tác từ nhiều nhà đáp ứng. Kéo tất cả lại với nhau thuận tiện và đơn giản hơn bạn nghĩ
# PHP, Nó hoạt động và sinh hoạt giải trí ra làm sao?
Trước khi tất cả chúng ta tìm hiểu bất kể điều gì khác, điều quan trọng là phải hiểu cách những ứng dụng PHP tương tác với thế giới bên phía ngoài
PHP chạy những ứng dụng phía sever theo chu kỳ luân hồi yêu cầu/phản hồi. Mọi tương tác với ứng dụng của bạn—dù là từ trình duyệt, dòng lệnh hay API REST—đều xuất hiện trong ứng dụng dưới dạng yêu cầu. Khi nhận được yêu cầu đó, ứng dụng sẽ được khởi động, nó xử lý yêu cầu để tạo phản hồi, phản hồi được gửi lại cho ứng dụng khách đã thực hiện yêu cầu và ứng dụng sẽ tắt. Điều đó xảy ra với mọi tương tác
# Bộ điều khiển phía trước
Được trang bị kiến thức đó, chúng tôi sẽ khởi đầu mọi thứ với bộ điều khiển phía trước. Bộ điều khiển phía trước là tệp PHP xử lý mọi yêu cầu cho ứng dụng của bạn. Đó là tệp PHP đầu tiên mà một yêu cầu truy cập trên đường vào ứng dụng của bạn và (về cơ bản) là tệp PHP ở đầu cuối mà một phản hồi chạy qua trên đường ra khỏi ứng dụng của bạn
Hãy sử dụng Hello, world cổ xưa. ví dụ được đáp ứng bởi sever web tích hợp của PHP chỉ để đảm nói rằng chúng tôi đã link mọi thứ đúng chuẩn. Nếu bạn chưa làm như vậy, hãy chắc như đinh rằng bạn có PHP 7. 2 hoặc mới hơn được setup trong môi trường tự nhiên thiên nhiên của bạn
Tạo một thư mục dự án công trình bất Động sản với một thư mục
composer init5 trong đó, sau đó bên trong nó tạo composer init6 với đoạn mã sauLưu ý rằng chúng tôi đang tuyên bố nhập nghiêm ngặt ở đây—đây là vấn đề bạn nên làm ở đầu mọi tệp PHP trong ứng dụng của tớ—vì những gợi ý nhập rất quan trọng để gỡ lỗi và truyền đạt ý định rõ ràng cho những nhà phát triển đi sau bạnĐiều hướng tới thư mục dự án công trình bất Động sản của bạn bằng công cụ dòng lệnh (như Terminal trên macOS) và khởi động sever web tích hợp của PHP
php -S localhost:8080 -t public/Bây giờ hãy tải . //sever cục bộ. 8080/ trong trình duyệt của bạn. Xem “Xin chào, thế giới. ” mà không còn bất kỳ lỗi nào?
Thật tuyệt vời. Bây giờ hãy chuyển sang thịt và khoai tây
# Gói tự động tải và bên thứ ba
Khi bạn lần đầu tiên khởi đầu với PHP, bạn hoàn toàn có thể đã sử dụng những câu lệnh
composer init7 hoặc composer init8 trong ứng dụng của tớ để đưa vào hiệu suất cao hoặc thông số kỹ thuật từ những tệp PHP khác. Nói chung, chúng tôi muốn tránh điều đó vì nó khiến con người khó đi theo đường dẫn mã hơn và hiểu vị trí của những phụ thuộc. Điều đó làm cho việc gỡ lỗi trở thành một cơn ác mộng thực sựGiải pháp là tự động tải. Tự động tải chỉ nghĩa là lúc ứng dụng của bạn cần sử dụng một lớp, PHP sẽ biết tìm nó ở đâu và tự động tải nó khi được yêu cầu. Nó đã có sẵn từ PHP 5, nhưng việc sử dụng nó thực sự khởi đầu tăng tốc với sự ra đời của PSR-0 (tiêu chuẩn tải tự động đã được thay thế bởi PSR-4)
Chúng tôi hoàn toàn có thể trải qua quá trình viết trình tải tự động của riêng mình, nhưng vì chúng tôi sẽ sử dụng Trình soạn thảo để quản lý những phụ thuộc của bên thứ ba và nó đã gồm có một trình tải tự động hoàn toàn hoàn toàn có thể sử dụng được, nên hãy chỉ sử dụng trình tải đó
Đảm nói rằng bạn đã setup Composer trên khối mạng lưới hệ thống của tớ. Sau đó thiết lập Composer cho dự án công trình bất Động sản này
composer initĐiều này sẽ đưa bạn qua một hướng dẫn tương tác để tạo tệp thông số kỹ thuật
composer init9 của bạn. Khi đã xong, hãy mở nó trong trình sửa đổi và thêm trường "name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 0 để nó trông in như vậy này. (Điều này đảm bảo trình tải tự động biết nơi cần tìm để tìm những lớp của ứng dụng của chúng tôi. )________số 8
Bây giờ hãy setup trình soạn thảo cho dự án công trình bất Động sản này, trình soạn thảo này mang lại bất kỳ phụ thuộc nào (nếu chúng tôi có) và thiết lập trình tải tự động cho chúng tôi
composer init0Cập nhật
"name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 1 để đưa vào trình tải tự động. Lý tưởng nhất là đây là một trong số ít câu lệnh "gồm có" mà bạn sẽ sử dụng trong ứng dụng của tớcomposer init2Nếu bạn tải lại ứng dụng của tớ trong trình duyệt, bạn sẽ không thấy điều gì khác lạ. Trình tải tự động ở đó, nó không thực hiện bất kỳ việc làm nặng nhọc nào đối với chúng tôi. Hãy di tán Hello, world. ví dụ cho một lớp được tải tự động để xem nó hoạt động và sinh hoạt giải trí ra làm sao
Tạo một thư mục mới từ thư mục gốc của dự án công trình bất Động sản mang tên là
"name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 2 và bên trong nó thêm "name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 3 với đoạn mã saucomposer init5Bây giờ trong
"name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 1, hãy thay câu lệnh echo bằng lệnh gọi phương thức "name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 5 trên lớp "name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 6composer init9Tải lại ứng dụng của bạn trong trình duyệt để xem thông báo mới
# Tiêm phụ thuộc là gì?
Dependency Injection là một kỹ thuật lập trình trong đó mỗi phần phụ thuộc được đáp ứng cho một lớp yêu cầu nó thay vì lớp đó vươn ra bên phía ngoài để lấy thông tin hoặc hiệu suất cao mà nó cần
Ví dụ: giả sử một phương thức lớp trong ứng dụng của bạn cần đọc từ cơ sở tài liệu. Đối với điều đó, bạn sẽ cần một link cơ sở tài liệu. Một kỹ thuật phổ biến là tạo một link mới với thông tin đăng nhập được lấy từ không khí chung
Nhưng điều đó thật lộn xộn, nó đặt những trách nhiệm trong phương thức này sẽ không thực sự thuộc về nơi này—tạo một đối tượng link DB mới, truy xuất thông tin xác thực và xử lý bất kỳ sự cố nào hoàn toàn có thể xảy ra nếu link không thành công—và nó dẫn đến nhiều mã trùng lặp . Nếu bạn từng thử kiểm tra đơn vị lớp này, bạn sẽ thấy rằng bạn không thể. Lớp này được link ngặt nghèo với cả môi trường tự nhiên thiên nhiên ứng dụng và cơ sở tài liệuThay vào đó, tại sao không nói rõ ràng nhất hoàn toàn có thể về những gì lớp học của bạn cần khởi đầu?
Điều đó rõ ràng hơn, dễ hiểu hơn và ít bị lỗi hơn. Thông qua gợi ý kiểu và nội xạ phụ thuộc, phương thức khai báo đúng chuẩn những gì nó cần để thực hiện việc làm của tớ và lấy nó mà không cần gọi một phụ thuộc bên phía ngoài từ bên trong chính nó. Khi nói đến thử nghiệm đơn vị, chúng tôi đang ở trạng thái tuyệt vời để mô phỏng link cơ sở tài liệu và chuyển nó vàoGiờ đây, vùng chứa nội dung tiêm phụ thuộc là một công cụ mà bạn xung quanh toàn bộ ứng dụng của tớ để xử lý việc làm tạo và đưa những phần phụ thuộc đó vào. Bộ chứa tránh việc phải sử dụng kỹ thuật tiêm phụ thuộc, nhưng nó sẽ giúp ích đáng kể khi ứng dụng của bạn phát triển và trở nên phức tạp hơn
Chúng tôi sẽ sử dụng một trong những bộ chứa DI phổ biến nhất cho PHP. tên gọi phù hợp PHP-DI. (Đáng lưu ý rằng những tài liệu của nó có một cách khác để lý giải việc tiêm phụ thuộc hoàn toàn có thể hữu ích cho một số trong những độc giả. )
# Vùng chứa tiêm phụ thuộc
Bây giờ tất cả chúng ta đã thiết lập Composer, việc setup PHP-DI khá thuận tiện và đơn giản. Quay trở lại dòng lệnh của bạn để setup nó
php -S localhost:8080 -t public/0Cập nhật
"name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 1 để định thông số kỹ thuật và xây dựng vùng chứaphp -S localhost:8080 -t public/1Không có gì kinh hoàng xảy ra. Đây vẫn là một ví dụ đơn giản với mọi thứ trong một tệp để thuận tiện và đơn giản xem điều gì đang ra mắt
Cho đến nay, chúng tôi chỉ định thông số kỹ thuật vùng chứa để chúng tôi phải khai báo rõ ràng những phụ thuộc (thay vì sử dụng tự động nối dây hoặc chú thích) và truy xuất đối tượng
"name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 6 từ vùng chứaMột thời gian ngắn sang một bên. Tự động nối dây là một tính năng tuyệt vời được đáp ứng bởi nhiều bộ chứa DI để giúp giảm thiểu thông số kỹ thuật không cần suy nghĩ, nhưng chúng tôi sẽ tắt tính năng này trong hướng dẫn này để tối đa hóa việc học. Định thông số kỹ thuật rõ ràng tất cả những phụ thuộc ở đây sẽ giúp bạn làm rõ hơn nhiều về những gì bộ chứa DI tự động đang thực hiện dưới mui xe
Hãy làm cho mọi thứ trở nên dễ đọc hơn bằng phương pháp nhập những không khí tên nơi tất cả chúng ta hoàn toàn có thể
php -S localhost:8080 -t public/2Hiện tại, điều này còn có vẻ như như sẽ có thêm nhiều phiền phức để làm những gì chúng tôi đã làm trước đây
Đừng lo ngại, vùng chứa có ích khi chúng tôi thêm một vài công cụ khác để giúp chuyển hướng yêu cầu thông qua ứng dụng của chúng tôi. Họ sẽ sử dụng vùng chứa để tải đúng lớp lúc nào và ở đâu chúng tôi cần
# Phần mềm trung gian
Nếu bạn tưởng tượng ứng dụng của tớ in như một củ hành với những yêu cầu đến từ bên phía ngoài, đi đến trung tâm của củ hành và quay trở lại dưới dạng phản hồi, thì phần mềm trung gian là mỗi lớp của củ hành nhận yêu cầu, hoàn toàn có thể thực hiện điều gì đó với yêu cầu đó, . (Điều đó hoàn toàn có thể xảy ra nếu phần mềm trung gian đang kiểm tra một điều kiện nhất định mà yêu cầu không thỏa mãn, ví dụ như yêu cầu một tuyến đường không tồn tại. )
Nếu yêu cầu hoàn thành xong, ứng dụng sẽ xử lý và biến nó thành phản hồi và mỗi phần mềm trung gian theo thứ tự ngược lại sẽ nhận được phản hồi, hoàn toàn có thể sửa đổi nó và chuyển nó sang phần mềm trung gian tiếp theo
Lấy mẫu những trường hợp sử dụng mà phần mềm trung gian hoàn toàn có thể tỏa sáng
- Gỡ lỗi những vấn đề trong quá trình phát triểnXử lý ngoại lệ một cách duyên dáng trong sản xuấtYêu cầu gửi đến số lượng giới hạn tỷ lệTrả lời những yêu cầu gửi đến cho những loại phương tiện không được hỗ trợxử lý CORSĐịnh tuyến những yêu cầu đến lớp trình xử lý thích hợp
Phần mềm trung gian liệu có phải là cách duy nhất để triển khai những công cụ xử lý những thứ này sẽ không? . Nhưng việc triển khai phần mềm trung gian làm cho quy trình yêu cầu/phản hồi trở nên rõ ràng hơn nhiều đối với bạn, điều đó nghĩa là việc gỡ lỗi thuận tiện và đơn giản hơn nhiều và quá trình phát triển cũng nhanh hơn nhiều
Chúng tôi sẽ tận dụng phần mềm trung gian cho trường hợp sử dụng ở đầu cuối được liệt kê ở trên. định tuyến
# Lộ trình
Một bộ định tuyến sử dụng thông tin từ một yêu cầu đến để tìm ra lớp nào sẽ xử lý nó. (e. g. URI
composer init00 phải được xử lý bởi composer init01 với composer init02 và composer init03 được chuyển vào dưới dạng đối số. )Đối với ứng dụng mẫu của chúng tôi, chúng tôi sẽ sử dụng bộ định tuyến FastRoute phổ biến thông qua triển khai phần mềm trung gian tương thích PSR-15
# Người điều phối phần mềm trung gian
Để ứng dụng của chúng tôi hoạt động và sinh hoạt giải trí với phần mềm trung gian FastRoute—và bất kỳ phần mềm trung gian nào khác mà chúng tôi setup—chúng tôi sẽ cần một bộ điều phối phần mềm trung gian
PSR-15 là một tiêu chuẩn phần mềm trung gian xác định giao diện cho tất cả phần mềm trung gian và bộ điều phối (được gọi là "trình xử lý yêu cầu" trong thông số kỹ thuật), được cho phép kĩ năng tương tác giữa nhiều loại phần mềm trung gian và bộ điều phối. Chúng tôi chỉ việc chọn một bộ điều phối tương thích với PSR-15 và chúng tôi hoàn toàn có thể chắc như đinh rằng nó sẽ hoạt động và sinh hoạt giải trí với mọi phần mềm trung gian tương thích với PSR-15
Hãy setup Relay làm bộ điều phối
php -S localhost:8080 -t public/3Và vì thông số phần mềm trung gian PSR-15 yêu cầu triển khai để chuyển những thông báo HTTP tương thích với PSR-7, nên chúng tôi sẽ sử dụng Zend Diactoros làm triển khai PSR-7 của chúng tôi
php -S localhost:8080 -t public/4Hãy để Relay sẵn sàng đồng ý phần mềm trung gian
php -S localhost:8080 -t public/5Chúng tôi đang sử dụng
composer init04 trên dòng 16 để tập hợp tất cả thông tin thiết yếu để tạo một Yêu cầu mới và chuyển nó cho Chuyển tiếp. Đây là nơi composer init05 đi vào ngăn xếp phần mềm trung gian của chúng tôiBây giờ, hãy thêm FastRoute và phần mềm trung gian xử lý yêu cầu. (FastRoute xác định xem một yêu cầu có hợp lệ và thực sự hoàn toàn có thể được xử lý bởi ứng dụng hay là không và trình xử lý yêu cầu sẽ gửi
composer init05 tới trình xử lý được định thông số kỹ thuật cho tuyến đó trong định nghĩa tuyến. )php -S localhost:8080 -t public/6Và xác định tuyến đường đến Hello, world của chúng tôi. lớp xử lý. Chúng tôi sẽ sử dụng một tuyến đường
composer init07 ở đây để chỉ ra rằng một tuyến đường khác ngoài URI cơ sở hoạt động và sinh hoạt giải tríphp -S localhost:8080 -t public/7Để điều này hoạt động và sinh hoạt giải trí, bạn cũng cần phải update
"name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 6 để biến nó thành một lớp không thể thay đổi, nghĩa là lớp hoàn toàn có thể được gọi như thể nó là một hàmphp -S localhost:8080 -t public/8(Lưu ý thêm
composer init09 trong phương pháp ma thuật composer init20. Chúng ta sẽ làm được điều đó trong giây lát—chỉ là không thích bạn bỏ lỡ nó. )Bây giờ hãy tải . //sever cục bộ. 8080/xin chào và chúc bạn thành công
# Chất kết dính giữ tất cả lại với nhau
Người đọc sắc sảo sẽ nhanh gọn nhận thấy rằng tuy nhiên chúng tôi vẫn đang gặp trở ngại vất vả trong việc định thông số kỹ thuật và xây dựng bộ chứa DI, nhưng nó thực sự không làm được gì cho chúng tôi. Người điều phối và phần mềm trung gian hoàn toàn có thể thực hiện việc làm của tớ mà không cần nó
Vì vậy, khi nó đi vào chơi?
Chà, điều gì sẽ xảy ra nếu—như hầu như luôn luôn xảy ra trong một ứng dụng thực tế—lớp
"name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 6 có một phụ thuộc?Hãy ra mắt một phụ thuộc tầm thường và xem điều gì sẽ xảy ra
php -S localhost:8080 -t public/9Tải lại trình duyệt và…
Rất tiếc
Nhìn vào đó
composer init22Điều đó đang xảy ra chính bới giờ đây
"name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 6 yêu cầu một chuỗi được đưa vào thời gian xây dựng để thực hiện việc làm của nó và nó đã bị treo. Đây là nơi container giúp sứcHãy xác định sự phụ thuộc đó trong vùng chứa và chuyển vùng chứa tới
composer init24 để xử lý và xử lý nócomposer init0thì đấy. Bạn sẽ thấy “Xin chào, thế giới quán bar. ” khi bạn tải lại trình duyệt
# Gửi phản hồi đúng cách
Bạn có nhớ trước đó khi tôi đề cập đến câu lệnh
composer init25 trong "name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 6 không?Chà, đó là một cách nhanh gọn và dơ bẩn để đảm nói rằng chúng tôi nhận được phản hồi đơn giản trong khi chúng tôi đang xây dựng mọi thứ, nhưng đó không phải là cách tốt nhất để gửi đầu ra tới trình duyệt. Một kỹ thuật thô thiển như vậy mang lại cho
"name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 6 thêm trách nhiệm phản hồi—vốn thực sự phải là trách nhiệm của một lớp khác—nó làm phức tạp quá mức việc gửi những tiêu đề và mã trạng thái phù hợp, đồng thời nó tắt ứng dụng mà không cho phần mềm trung gian sau "name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 6 có thời cơ chạyHãy nhớ rằng, mỗi phần mềm trung gian đều có thời cơ sửa đổi
composer init05 trên đường vào ứng dụng của chúng tôi và (theo thứ tự ngược lại) sửa đổi phản hồi trên đường ra khỏi ứng dụng. Ngoài giao diện chung cho composer init05, PSR-7 cũng xác định cấu trúc cho một thông báo HTTP khác sẽ giúp chúng tôi vượt qua nửa sau của chu kỳ luân hồi đó. composer init51. (Nếu bạn muốn thực sự tìm làm rõ ràng, hãy tham khảo tất cả về những thông báo HTTP và điều gì làm cho những tiêu chuẩn Yêu cầu và Phản hồi của PSR-7 trở nên tuyệt vời như vậy. )Cập nhật
"name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 6 để trả lại một composer init51composer init1Và update định nghĩa vùng chứa để đáp ứng cho
"name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 6 một đối tượng composer init51 mớicomposer init2Tuy nhiên, nếu bạn tải lại trang giờ đây, bạn sẽ nhận được một màn hình hiển thị trống. Ứng dụng của chúng tôi đang trả về một đối tượng
composer init51 thích hợp từ bộ điều phối phần mềm trung gian, nhưng sau đó… thì sao?Không làm gì với nó, đó là những gì
Chúng tôi cần thêm một công cụ để kết thúc mọi thứ. một bộ phát. Trình phát nằm giữa ứng dụng của bạn và sever web (Apache, nginx, v.v. ) sẽ gửi phản hồi của bạn tới ứng dụng khách đã khởi đầu yêu cầu. Về cơ bản, nó lấy đối tượng
composer init51 và dịch nó thành hướng dẫn mà API sever hoàn toàn có thể hiểu đượcHãy sử dụng Trình phát HTTP của Narrowspark
composer init3Cập nhật
"name": "kevinsmith/no-framework", "description": "An example of a modern PHP application bootstrapped without a framework.", "type": "project", "require": , "autoload": "psr-4": "ExampleApp\": "src/" 1 để nhận composer init51 từ bộ điều phối và chuyển nó tới bộ phátcomposer init4Tải lại trình duyệt của bạn và chúng tôi sẽ hoạt động và sinh hoạt giải trí trở lại. Và lần này với cách xử lý phản hồi mạnh mẽ và tự tin hơn nhiều
Dòng 15 trong ví dụ mã ở trên là nơi chu kỳ luân hồi yêu cầu/phản kết quả cuối cùng thúc trong ứng dụng của chúng tôi và sever web sẽ tiếp quản
Lưu ý rằng vì quyền lợi của ví dụ, thông số kỹ thuật bộ phát mà chúng tôi đang sử dụng ở đây rất đơn giản. Mặc dù nó hoàn toàn có thể phức tạp hơn một chút ít, nhưng một ứng dụng thực nên được định thông số kỹ thuật để tự động sử dụng trình phát trực tuyến cho những lượt tải xuống lớn. Tài liệu về Trình xử lý yêu cầu HTTP của Zend, một bộ điều phối phối hợp PSR-15 và bộ phát PSR-7, thảo luận về một cách thú vị để thực hiện điều này
# kết thúc
Vì vậy, có bạn có nó. Chỉ với 44 dòng và sự trợ giúp của một số trong những thành phần được sử dụng rộng rãi, đã được kiểm tra kỹ lưỡng, hoàn toàn có thể tương tác đáng tin cậy, tất cả chúng ta có bộ khởi động cho một ứng dụng PHP tân tiến. Nó tương thích với PSR-4, PSR-7, PSR-11 và PSR-15, nghĩa là bạn hoàn toàn có thể sử dụng lựa chọn của tớ trong số nhiều cách thức triển khai những tiêu chuẩn đó của nhà đáp ứng cho những thông báo HTTP, bộ chứa DI, phần mềm trung gian,
Chúng tôi đi sâu vào một số trong những công nghệ tiên tiến và nguyên do đằng sau những quyết định của tớ, nhưng tôi kỳ vọng bạn hoàn toàn có thể thấy việc khởi động một ứng dụng mới đơn giản ra làm sao mà không cần đến khung công tác thao tác. Có lẽ quan trọng hơn, tôi kỳ vọng bạn đã sẵn sàng sẵn sàng tốt hơn để áp dụng những kỹ thuật này vào một ứng dụng hiện có khi có nhu yếu
Hãy xem repo GitHub cho ứng dụng ví dụ này và thoải mái rẽ nhánh hoặc tải xuống
Nếu bạn đang tìm kiếm những nguồn tuyệt vời hơn cho những gói tách rời, rất chất lượng, tôi thực sự khuyên bạn nên xem qua Aura, Liên minh những gói đặc biệt, những thành phần Symfony, những thành phần Zend Framework, những thư viện tập trung vào bảo mật thông tin của Paragon Initiative và list PSR- này
Nếu bạn sử dụng mã ví dụ này trong sản xuất, bạn hoàn toàn có thể muốn chia nhỏ những định nghĩa định tuyến và vùng chứa thành những tệp riêng để chúng dễ bảo dưỡng hơn khi độ phức tạp tăng lên. Tôi cũng khuyên bạn nên triển khai EmitterStack để xử lý thông minh những tệp tải xuống và những phản hồi lớn khác
Hãy chắc như đinh đọc phần tiếp theo. “Không phải bạn vừa xây dựng khuôn khổ của riêng mình sao?”
Bất kỳ thắc mắc, nhầm lẫn, hoặc đề xuất để cải tổ?
Cập nhật ngày 12 tháng 1 năm 2022. Đã update tất cả những thư viện và nâng yêu cầu PHP lên 7. 2, phiên bản PHP được tương hỗ tích cực tối thiểu. Phiên bản tiên tiến nhất của Zend Diactoros không hề gồm có bộ phát nữa, vì vậy, phần Gửi phản hồi đúng cách đã được update để sử dụng bộ phát của Narrowpark thay thế. Nó cũng là một sự thay thế hoàn toàn liền mạch. Thực sự làm nổi bật những PSR đó hoàn toàn có thể tuyệt vời ra làm sao
Cập nhật ngày 24 tháng 3 năm 2022. Kể từ khi xuất bản bài đăng này lần đầu tiên, tôi đã bị thuyết phục phải suy nghĩ lại về lập trường của tớ đối với việc tự động link. Những quyền lợi là không thể phủ nhận
- Quá trình phát triển thường nhanh hơn và với “ngân sách” thấp hơn nhiều khi thêm những phụ thuộc mới vào một lớp, sẽ có ít tranh luận hơn đối với việc chia nhỏ trách nhiệm thành những lớp riêng biệtAutowiring thường chỉ hoạt động và sinh hoạt giải trí với những tham số gợi ý kiểu, điều này tự nhiên không khuyến khích sự ám ảnh nguyên thủyTính dễ hiểu được cải tổ vì hành trình dài thông số kỹ thuật vùng chứa đã biến mất, chỉ để lại cho bạn thông số kỹ thuật có ý nghĩa
Như với bất kỳ "phép thuật" nào, việc tự động link nên được xem xét thận trọng trước khi kích hoạt, nhưng những bộ chứa DI tân tiến xử lý nó khá hợp lý. Ví dụ: PHP-DI chỉ tự động link những lớp rõ ràng, do đó không hoàn toàn có thể xảy ra sự mơ hồ và bộ chứa dịch vụ của Symfony sẽ đưa ra một ngoại lệ không thể tránh khỏi trong môi trường tự nhiên thiên nhiên nhà phát triển nếu có bất kỳ sự mơ hồ nào về việc nên đáp ứng phụ thuộc nào