- ThinkPHP 5实战
- 夏磊
- 487字
- 2021-03-24 19:43:34
3.4 路由地址
路由地址就是路由匹配成功之后需要执行的操作。ThinkPHP 5支持以下几种方式:
- 路由到模块/控制器
- 重定向
- 路由到控制器方法
- 路由到类静态方法
- 路由到闭包函数
3.4.1 路由到模块/控制器
'news/:id' => 'index/news/read'
控制器定义如下:
控制器支持无限级设置,例如下面的路由定义将会执行app\index\controller\site\news控制器的read方法:
'news/:id' => 'index/site.news/read'
3.4.2 重定向
重定向和路由的区别是,重定向会在浏览器中产生一次301或302响应,而路由是浏览器无感知的。
重定向以“/”(站内,请特别注意不要忘记斜杠)或“http”或“https”开始,站内跳转如下:
'news/:id' => '/news/show/:id.html'
访问/news/id链接时,浏览器将会产生301响应,跳转到/news/show/id.html地址。
站外跳转如下:
'news/:id' => 'http://www.example.com/news/:id.html'
3.4.3 路由到控制器方法
这种方式看起来似乎和第一种是一样的,但是不需要去解析模块/控制器/操作,同时也不会去初始化模块。例如,下面的定义将会执行index模块的news控制器的read方法:
'news/:id' => '@index/news/read'
由于是直接路由到控制器方法,因此获取当前模块名、控制器名、操作名会报错,因为ThinkPHP没有初始化这些变量。
3.4.4 路由到类静态方法
此类路由支持任何类的静态方法,包括控制器。例如,下面的定义将会路由到index模块中News控制器的静态read方法:
'news/:id' => 'app\index\controller\News::read'
3.4.5 路由到闭包
此类路由直接在application/route.php中定义,典型的例子如下:
Route::get('news/:id',function($id){ return '访问'.$id.'的新闻'; });