marcfowler/macaw

此包已被弃用,不再维护。未建议替代包。

简单的PHP路由类。

dev-master 2016-07-12 09:48 UTC

This package is auto-updated.

Last update: 2024-04-22 14:02:46 UTC


README

Macaw是一个简单、开源的PHP路由器。它非常小巧(约150行代码),快速,并拥有一些优秀的注释源代码。这个类允许你将其直接扔到项目中并立即开始使用。

安装

如果你有Composer,只需在项目的composer.json中将Macaw作为一个项目依赖项。如果没有,只需下载.ZIP文件并将其解压缩到你的项目目录。

require: {
    "marcfowler/macaw": "dev-master"
}

示例

首先,use Macaw命名空间

use \marcfowler\macaw\Macaw;

Macaw不是对象,因此你可以直接对该类进行操作。以下是一个简单的Hello World示例

Macaw::get('/', function() {
  echo 'Hello world!';
});

Macaw::dispatch();

你可以指定一个前缀,该前缀将被添加到所有路由中。如果你知道你正在运行在特定的URL后面,而该URL并不总是由你执行的目录定义,这将非常有用。例如,如果你知道你的文件是在/subfolder/somewhere-else/被访问的,你可以

Macaw::setPrefix('/subfolder/somewhere-else/');
Macaw::get('/', function() {
  echo 'Hello!';
});

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();

你可能希望在找到匹配的路由后停止执行。在下面的代码中没有调用haltOnMatch(),如果你请求了/,你会看到'Hello world!'和'I am further execution...'都被显示出来。要防止这种情况,只需添加以下行

Macaw::haltOnMatch(true); // This will prevent further execution once a match is found

Macaw::get('/', function() {
  echo 'Hello world!';
});

Macaw::dispatch();

echo 'I am further execution...';

如果你需要覆盖此请求使用的HTTP方法,你可以设置它

Macaw::setMethod('POST');

最后,如果为某个位置未定义路由,你可以让Macaw运行一个自定义回调,例如

Macaw::error(function() {
  echo '404 :: Not Found';
});

如果你没有指定错误回调,Macaw将简单地回显404

为了让服务器知道URI不指向真实的文件,你可能需要使用以下示例之一配置文件