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.'的新闻';
     });