Macaw เป็นเราเตอร์ PHP แบบโอเพ่นซอร์สที่เรียบง่าย มันมีขนาดเล็กมาก (~150 LOC) รวดเร็ว และมีซอร์สโค้ดที่มีคำอธิบายประกอบที่ยอดเยี่ยม คลาสนี้ช่วยให้คุณโยนมันลงในโปรเจ็กต์ของคุณและเริ่มใช้งานได้ทันที
หากคุณมี Composer ให้รวม Macaw เป็นการพึ่งพาโปรเจ็กต์ใน composer.json
ของคุณ หากคุณไม่เพียงแค่ติดตั้งโดยการดาวน์โหลดไฟล์ .ZIP และแตกไฟล์ไปยังไดเร็กทอรีโปรเจ็กต์ของคุณ
require: {
"noahbuscher/macaw": "dev-master"
}
ขั้นแรก use
เนมสเปซ Macaw:
use NoahBuscher Macaw Macaw ;
Macaw ไม่ใช่ object ดังนั้นคุณจึงสามารถดำเนินการกับชั้นเรียนได้โดยตรง นี่คือสวัสดีชาวโลก:
Macaw:: get ( ' / ' , function () {
echo ' Hello world! ' ;
});
Macaw:: dispatch ();
Macaw ยังรองรับ lambda URIs เช่น:
Macaw:: get ( ' /(:any) ' , function ( $ slug ) {
echo ' The slug is: ' . $ slug ;
});
Macaw:: dispatch ();
คุณยังสามารถส่งคำขอสำหรับวิธี HTTP ใน Macaw ได้ ดังนั้นคุณจึงทำสิ่งต่อไปนี้ได้
Macaw::get( ' / ' , function () {
echo ' I ' m a GET request! ' ;
});
Macaw::post( ' / ' , function() {
echo ' I'm a POST request! ' ;
});
Macaw::any( ' / ' , function() {
echo ' I can be both a GET and a POST request!';
});
Macaw::dispatch();
สุดท้ายนี้ หากไม่มีการกำหนดเส้นทางสำหรับสถานที่ใดสถานที่หนึ่ง คุณสามารถทำให้ Macaw เรียกใช้การโทรกลับแบบกำหนดเองได้ เช่น:
Macaw:: error ( function () {
echo ' 404 :: Not Found ' ;
});
หากคุณไม่ระบุข้อผิดพลาดในการเรียกกลับ Macaw ก็จะสะท้อน 404
เพื่อให้เซิร์ฟเวอร์ทราบว่า URI ไม่ได้ชี้ไปที่ไฟล์จริง คุณอาจจำเป็นต้องใช้ไฟล์การกำหนดค่าตัวอย่างไฟล์ใดไฟล์หนึ่ง
สำหรับการสาธิตนี้ สมมติว่าฉันมีโฟลเดอร์ชื่อ controllers พร้อมด้วย demo.php
ดัชนี.php:
require ( ' vendor/autoload.php ' );
use NoahBuscher Macaw Macaw ;
Macaw:: get ( ' / ' , ' Controllersdemo@index ' );
Macaw:: get ( ' page ' , ' Controllersdemo@page ' );
Macaw:: get ( ' view/(:num) ' , ' Controllersdemo@view ' );
Macaw:: dispatch ();
สาธิต.php:
<?php
namespace Controllers ;
class Demo {
public function index ()
{
echo ' home ' ;
}
public function page ()
{
echo ' page ' ;
}
public function view ( $ id )
{
echo $ id ;
}
}
นี่คือการติดตั้ง Macaw ผ่านผู้แต่ง
ผู้แต่ง.json:
{
"require": {
"noahbuscher/macaw": "dev-master"
},
"autoload": {
"psr-4": {
"" : ""
}
}
}
.htaccess(อาปาเช่):
RewriteEngine On
RewriteBase /
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [QSA,L]
.htaccess(Nginx):
rewrite ^/(.*)/$ /$1 redirect;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php break;
}