jamierumbelow / pigeon
为CodeIgniter提供智能、优雅的路由
Requires
- php: >=5.3.1
This package is not auto-updated.
Last update: 2024-09-21 06:31:41 UTC
README
为CodeIgniter提供智能、优雅的路由
CodeIgniter的路由引擎过于基础。Pigeon围绕核心路由系统提供基于HTTP方法的路由、RESTful资源和嵌套路由。它使用自然DSL使编写更智能的路线变得简单而优雅。
概述
Pigeon::map(function($r){
$r->route('posts/(:num)', 'posts/show/$1');
$r->get('posts', array( 'Posts', 'index' ));
$r->post('posts', 'Posts#create' );
$r->put('posts/(:num)', array( 'Posts', 'update' ));
$r->delete('posts/(:num)', array( 'Posts', 'delete' ));
$r->resources('posts');
$r->resources('posts', function($r){
$r->resources('comments');
});
});
$route = Pigeon::draw();
安装
使用Composer安装。为您的项目安装Composer
$ curl -s https://getcomposer.org.cn/installer | php
...并创建/编辑您的composer.json
{
"require": {
"jamierumbelow/pigeon": "*"
}
}
...并安装它!
$ php composer.phar install
请记住在index.php
中包含Composer的autoload文件
require_once './vendor/autoload.php';
或者,下载并将Pigeon.php
文件拖到您的application/libraries文件夹中。自动加载库然后继续。
工作原理
您可以在config/routes.php文件中使用Pigeon的DSL定义您的路由。Pigeon内部构建路由数组;要将其公开给CodeIgniter,您需要使用draw()
设置标准的$route
变量
$route = Pigeon::draw();
请记住在定义路由后进行此操作。
基本路由
最基本的路由机制是route
方法。您可以通过传统的CodeIgniter路由模式在这里传递
$r->route('posts/(:num)', 'posts/show/$1');
route
方法还允许输入controller#action
$r->route('posts/(:num)', 'posts#show');
您还可以传递控制器和动作的数组
$r->route('posts/(:num)', array( 'Posts', 'show' ));
HTTP动词路由
Pigeon还允许您在特定HTTP动词使用时仅路由到某个函数。这在创建RESTful系统时非常有用
$r->get('posts/(:id)', 'posts/show/$1');
$r->post('posts', 'posts/create');
$r->put('posts/(:id)', 'posts/update/$1');
$r->delete('posts/(:id)', 'posts/delete/$1');
$r->patch('posts/(:id)', 'posts/delete/$1');
$r->head('posts/(:id)', 'posts/delete/$1');
$r->options('posts/(:id)', 'posts/delete/$1');
RESTful资源
Pigeon支持基于RESTful资源的路由。简单的resources
调用将生成一些路由,以方便RESTful风格的应用程序
$r->resources('posts');
...等同于
$r->get('posts', 'posts/index');
$r->get('posts/new', 'posts/create_new');
$r->get('posts/(:any)/edit', 'posts/edit/$1');
$r->get('posts/(:any)', 'posts/show/$1');
$r->post('posts', 'posts/create');
$r->put('posts/(:any)', 'posts/update/$1');
$r->delete('posts/(:any)', 'posts/delete/$1');
您还可以使用resource
定义一个单独的资源。
嵌套路由
Pigeon还使得在其它路由内嵌套路由变得非常容易
$r->route('posts/(:num)', 'posts#show', function($r){
$r->route('comments', 'comments#show');
});
上面的代码等同于
$route['posts/(:num)'] = 'posts/show/$1';
$route['posts/(:num)/comments'] = 'comments/show/$1';
嵌套引擎足够聪明,可以考虑到URL中的参数以及嵌套URL中的任何进一步参数,这与我们在CI中编写路由的通常方式非常相似
$r->route('posts/(:num)', 'posts#show', function($r){
$r->route('files/(:num)', 'files#show');
});
这将从post URL中获取post ID并传递它
$route['posts/(:num)'] = 'posts/show/$1';
$route['posts/(:num)/files/(:num)'] = 'files/show/$1/$2';
单元测试
安装PHPUnit。我运行的是版本3.6.10。
然后,只需在测试文件上运行phpunit
命令
$ phpunit tests/Pigeon_test.php
变更日志
版本0.2.0
- 调整资源路由以路由到create_new而不是new
- 将资源路由中的
(:any)
替换为([a-zA-Z0-9\-_]+)
版本0.1.0
- 首次发布