zaingithub / router
dev-master
2017-06-16 01:35 UTC
Requires
- php: >=5.3.3
This package is not auto-updated.
Last update: 2024-09-20 21:01:59 UTC
README
Macaw是一个简单、开源的PHP路由器。它非常小巧(约150行代码),速度快,并提供了一些优秀的注释源代码。这个类允许你将其直接添加到项目中并立即使用。
安装
如果你有Composer,只需在项目的composer.json
中将Macaw作为一个依赖项包括进去。如果没有,可以通过下载.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 <3 GET commands!'; }); Macaw::post('/', function() { echo 'I <3 POST commands!'; }); Macaw::dispatch();
最后,如果某个位置没有定义路由,你可以让Macaw运行一个自定义回调,比如
Macaw::error(function() { echo '404 :: Not Found'; });
如果你没有指定错误回调,Macaw将简单地echo 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
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]