齿轮 / 路由器
Laravel 路由器独立版
Requires
- gears/di: *
- illuminate/events: 4.*
- illuminate/routing: 4.*
Requires (Dev)
- codegyre/robo: *
- guzzlehttp/guzzle: 4.*
- phpunit/phpunit: 4.*
README
寻找维护者,我现在很少进行 PHP 开发,我已经转向其他领域,现在主要工作在 dotnet core、node.js & golang。如果有人有兴趣接管这些项目,请与我联系 - brad@bjc.id.au
路由器齿轮
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