路由
框架自带的路由组件,支持按url映射到文件的方式来执行相应的控制器,也支持定义路由路由配置。v2.7版本开始也支持第三方路由组件。除了旧版本自带的路由外也封装了FastRoute服务。有需要的话直接修改入口文件中相应的配置
框架是默认的路由组件是按url映射到文件的方式来执行相应的控制器,但是有一些情况下我们需要简短而优雅的网址便于用户记忆及SEO。这时候就需要使用url路由或者使用第三方的路由的服务。
在配置章节我们介绍过,在Config
目录下有route.php
配置文件,我们的所有路由都配置在这个文件里,下面介绍方法及规则
相应接口
<?php
//应用路由配置文件
use Cml\Route;
//只针对get请求有效
Route::get('pattern' , 'adminbase/System/Config/show');
//v2.7+建议这么写效率更高且支持应用多级子目录
Route::get('blog/bb/:aid\d', [
'root/adminbase',//应用名,支持多级子目录
'System/Config',//控制器,支持多级子目录
'show'//方法名
]);
//只针对post请求有效
Route::post('pattern' , 'adminbase/System/Config/update');
//v2.7+建议这么写效率更高且支持应用多级子目录
Route::post('blog/bb/:aid\d', [
'root/adminbase',//应用名,支持多级子目录
'System/Config',//控制器,支持多级子目录
'update'//方法名
]);
//只针对put请求有效
Route::put('pattern' , 'adminbase/System/Config/add');
//v2.7+建议这么写效率更高且支持应用多级子目录
Route::put('blog/bb/:aid\d', [
'root/adminbase',//应用名,支持多级子目录
'System/Config',//控制器,支持多级子目录
'add'//方法名
]);
//只针对delete请求有效
Route::delete('pattern' , 'adminbase/System/Config/delete');
//v2.7+建议这么写效率更高且支持应用多级子目录
Route::delete('blog/bb/:aid\d', [
'root/adminbase',//应用名,支持多级子目录
'System/Config',//控制器,支持多级子目录
'delete'//方法名
]);
//只针对patch请求有效
Route::patch('pattern', 'adminbase/System/Config/patch');
//v2.7+建议这么写效率更高且支持应用多级子目录
Route::patch('blog/bb/:aid\d', [
'root/adminbase',//应用名,支持多级子目录
'System/Config',//控制器,支持多级子目录
'patch'//方法名
]);
//只针对所有请求都有效
Route::any('pattern' , 'adminbase/System/Config/index');
//v2.7+建议这么写效率更高且支持应用多级子目录
Route::any('blog/bb/:aid\d', [
'root/adminbase',//应用名,支持多级子目录
'System/Config',//控制器,支持多级子目录
'index'//方法名
]);
/**
* RESTful 路由
*
* get 请求对应 adminbase/System/Config/getRead
* post 请求对应 adminbase/System/Config/postRead
* delete 请求对应 adminbase/System/Config/deleteRead
* put 请求对应 adminbase/System/Config/putRead
* patch 请求对应 adminbase/System/Config/patchRead
*/
Route::rest('pattern' , 'adminbase/System/Config/read');
//v2.7+建议这么写效率更高且支持应用多级子目录
Route::any('blog/bb/:aid\d', [
'root/adminbase',//应用名,支持多级子目录
'System/Config',//控制器,支持多级子目录
'index'//方法名
]);
自带的路由pattern规则定义(第三方的路由请参考相对应的文档)
如我们配置了一条路由
\Cml\Route::get('list/:id\d' => [
'web'
'Blog/Article',
'show'
]);
这条路由的意思为 当用户以GET请求访问 http://域名/list/1.html 这样的地址时,框架会执行的Article控制器的list方法。 \d为匹配数字 :id意思为它是一个动态参数 且在控制器中可使用\Cml\Http\Input::getInt('id')
来接收在模板中可以使用{{url "list/{$id}"}}
生成相应的url
分组路由
use Cml\Route;
Route::group('v1', function() {
Route::get('user/add', 'api/User/add');
Route::get('user/edit', 'api/User/edit');
});
这边定义了 v1分组
,即匹配 v1/user/add
以及v1/user/edit
这两个url
多应用单独定义路由
默认情况我们的路由是定义在全局projxx/Config/route.php
中。但是如果我们有多个应用。
比如有web
、admin
、api
三个应用,然后我们想在web
中定义自己的路由。这时候可以在web/Config/route.php
中定义web
独立的路由。然后在projxxx/Config/route.php
中使用 Route::loadAppRoute('web');
将其载入即可。