齿轮/路由器

此包已被废弃且不再维护。没有推荐替代包。

Laravel 路由器独立版

v0.6.6 2014-12-11 02:46 UTC

This package is not auto-updated.

Last update: 2020-01-24 15:23:41 UTC


README

寻找维护者,我现在很少进行 PHP 开发,我已经转向其他领域,现在主要工作在 dotnet core、node.js & golang。如果有人有兴趣接管这些项目,请与我联系 - brad@bjc.id.au

路由器齿轮

Build Status Latest Stable Version Total Downloads License

Laravel 路由器独立版

好吧,希望到现在你已经听说过 Laravel,这个PHP框架让事情变得简单。所以,首先,必须给 Taylor Otwell 点赞,他是路由API的作者。

如何安装

通过composer安装很简单

composer require gears/router:*

如何使用

在你的 非 Laravel 应用程序中。你可以像这样使用 Laravel 路由API

// Make sure you have composer included
require('vendor/autoload.php');

// Install the gears router component
$router = new Gears\Router();
$router->routesPath = '/file/path/to/my/routes';
$router->dispatch();

// At this point execution will not continue. The router will either output
// the results from a route and exit or it will output a 404 and then exit.

/file/path/to/my/routes 可以是一个路由 PHP 文件。例如:/file/path/to/my/routes.php 这个文件看起来就像任何其他 Laravel 应用程序中的 routes.php 文件。

或者

路径可以是包含许多路由文件的文件夹。这些文件将自动为你包含并添加到路由器中。这是我的首选方案。

顺便说一句:在我的 Laravel 应用程序中,我放置了一些代码,类似于这个路由器中的一些代码,它会遍历 routes 文件夹,该文件夹位于我的 app 目录中。我将每个路由定义放在一个文件中。我很少使用控制器。我将每个路由文件命名为 search-{postcode}.GET.php,其中包含:Route::get('/search/{postcode}', function($postcode){}); 这使得原型开发周期非常快。

一个示例路由

所以就像 Laravel 路由一样,请参阅:https://laravel.net.cn/docs/routing 下面是一个示例路由文件。

Route::get('/', function()
{
	return 'I Am Groot';
});

类别名 在幕后,当你调用 dispatch() 时,我们会自动创建一个名为 Route 的新类别名,这设置了您熟悉的正常公共API。然而,如果 Route 类已经存在,我们也会将自己别名为 Gears\Route

404 错误

默认情况下,我们构建了一个简单且外观干净的 404 错误页面。感谢:http://html5boilerplate.com/ 谢谢大家。

但是,如果您希望覆盖路由器返回的 404 内容,则安装路由器可能看起来像这样

$router = new Gears\Router();
$router->routesPath = '/file/path/to/my/routes';
$router->notFound = 'Custom 404 HTML';
$router->dispatch();

404 异常 如果您将 404 参数设置为布尔值 false,那么我们将简单地重新抛出 404 异常,它是一个 实例

Symfony\Component\HttpKernel\Exception\NotFoundHttpException

然后您可以自行处理它。一个用例示例可能是拥有多个路由器,这样就可以提供 HMVC 类型的设置。

完成时退出

对于大多数设置,你可能希望PHP在路由器执行完毕并发送响应后停止执行。然而,如果出于某种原因你不想这样做,比如输出缓冲或其他原因。路由器的安装可能看起来像这样:

$router = new Gears\Router();
$router->routesPath = '/file/path/to/my/routes';
$router->exitOnComplete = false;
$router->dispatch();

那么,为什么会有这样的问题呢?

虽然Laravel非常酷、出色和伟大。如果你想要提取某个功能并在其他项目中使用它,可能会变得困难。首先,你必须对IoC容器有内在的理解。

然后你会发现这个类需要那个类,而那个类又需要某些其他配置变量,这些变量通常在Laravel应用中运行时在IoC中存在,但你的情况下你没有定义它,并且不希望定义这个值,因为它在你的所谓的应用程序中没有意义。

一个完美的例子是,当我想将session API提取出来用于WordPress时。它想知道一个booted方法,我认为这来自Illuminate\Foundation\Application。在这个时候,我已经不得不添加各种其他东西到IoC中使其满意,这是压垮骆驼的最后一根稻草,我爆发了程序员的脾气,走到冰箱前,抓起另一罐红牛,然后以新的方法坐下来。

结果就是这个项目。

由Brad Jones开发 - brad@bjc.id.au