noahbuscher / macaw
简单的PHP路由类。
dev-master
2019-01-14 14:49 UTC
Requires
- php: >=5.3.3
Requires (Dev)
- guzzle/guzzle: ~3.9
- phpunit/phpunit: ^4.8-stable
This package is not auto-updated.
Last update: 2020-01-20 19:15:42 UTC
README
Macaw 是一个简单、开源的 PHP 路由器。它非常小巧(~150 行代码),速度快,并且有一些优秀的注释源代码。这个类允许您将其直接添加到您的项目中并立即开始使用。
安装
如果您有 Composer,只需将 Macaw 作为项目依赖项包含在您的 composer.json
中。如果没有,只需下载 .ZIP 文件并将其解压到您的项目目录中。
require: {
"noahbuscher/macaw": "dev-master"
}
示例
首先,使用
Macaw 命名空间
use \NoahBuscher\Macaw\Macaw;
Macaw 不是一个对象,因此您可以直接对该类进行操作。以下是一个 Hello World 示例:
Macaw::get('/', function() { echo 'Hello world!'; }); Macaw::dispatch();
Macaw 还支持 lambda URI,例如
Macaw::get('/(:any)', function($slug) { echo 'The slug is: ' . $slug; }); Macaw::dispatch();
您还可以在 Macaw 中进行 HTTP 方法的请求,因此您也可以做
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 文件
index.php
require('vendor/autoload.php'); use NoahBuscher\Macaw\Macaw; Macaw::get('/', 'Controllers\demo@index'); Macaw::get('page', 'Controllers\demo@page'); Macaw::get('view/(:num)', 'Controllers\demo@view'); Macaw::dispatch();
demo.php
<?php namespace controllers; class Demo { public function index() { echo 'home'; } public function page() { echo 'page'; } public function view($id) { echo $id; } }
这是通过 composer 安装的 Macaw。
composer.json
{
"require": {
"noahbuscher/macaw": "dev-master"
},
"autoload": {
"psr-4": {
"" : ""
}
}
}
.htaccess(Apache)
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;
}