路由

之前我们一直在首页操作,首页默认指向app/controller/Index类的index方法.

为什么能直接指向呢?在config目录下route.php中定义了这么两行指向了默认的控制器

// 默认控制器名
'default_controller'    => 'Index',
// 默认操作名
'default_action'        => 'index',

当然你也可以通过 http://域名/index/index 访问首页

我们在新增一个方法index2

public function index2() {
	return "index2";
}

打开浏览器访问 http://localhost:8000/index/index2 显示出 index2.

我们如何美化这个url呢? 比如我直接访问 /index2 就能访问到我们上面定义的index2方法呢

这就得用上我们的路由了,

在route目录下有个app.php 这里就是定义整个项目的路由文件. 里面默认提供了两个测试的.

use think\facade\Route;

Route::rule('路由表达式', '路由地址', '请求类型');

我们先定义一个指向index2方法的路由

Route::rule('index2', 'index/index2');

定义之后原来的访问地址会自动失效,我们再次访问 /index2 页面也返回正常了.还可以通过/index2.html来访问.这也是因为route.php的配置文件中有声明伪静态后缀

// URL伪静态后缀
'url_html_suffix'       => 'html',

它还提供了几种其他方法来对应请求类型

Route::get(); // 定义GET请求路由规则
Route::post(); // 定义POST请求路由规则
Route::put(); // 定义PUT请求路由规则
Route::delete(); // 定义DELETE请求路由规则
Route::any(); // 所有请求都支持的路由规则

这里就简单的定义了路由.现在有一套流行的规范-RESTful API. 这里不做过多介绍,外链一篇文章 RESTful API 最佳实践

针对RESTful路由我们可以设置变量

动作 URI 路由
GET /photos/{id} (通过ID查看相片) Route::get('photos/:id','Photos/show');

我们就可以在Photos类中的show方法里接收id参数

public function index2($id) {
	return "接收到参数: " . $id;
}

有些情况下变量用[ ]包含起来后就表示该变量是路由匹配的可选变量。这点不懂的可以动手试试.