文件位置
配置文件
config/router.php
或者app/app_name/router.php
路由定义
router/app.php或者app/app_name/router/router.php
模板内容:
<?phpuse think\facade\Route;Route::get('/', 'Index');Route::get('dd', 'Index/ad');
注意事项
- 要使用
Route类注册路由必须首先在路由定义文件开头添加引用 - 启用多应用后,默认应用有BUG,路由访问不到。临时解决方案是再起一个入口文件
public/app_name.php,直接把public/index.php复制一份即可。注册路由
最基础的路由定义方法是:Route::rule(‘路由表达式’, ‘路由地址’, ‘请求类型’);
// 注册路由到News控制器的read操作Route::rule('new/:id','News/read');
http://serverName/news/read/id/5——>http://serverName/new/5
Route::rule('new/:id', 'News/update', 'POST');
变量规则
设置全局变量规则,全部路由有效
// 支持批量添加Route::pattern(['name' => '\w+','id' => '\d+',]);
组合变量
Route::get('item<name><id>', 'product/detail')->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']);Route::get('item@<name>-<id>', 'product/detail')->pattern(['name' => '\w+', 'id' => '\d+']);
动态路由
// 定义动态路由 控制器中用request->param('name')获取nameRoute::get('hello/:name', 'index/:name/hello');
多级控制器
Route::get('blog/:id','group.Blog/read');
表示路由到下面的控制器类,
index/controller/group/Blog
还可以支持路由到动态的应用、控制器或者操作,例如:
// action变量的值作为操作方法传入Route::get(':action/blog/:id', 'Blog/:action');
多级控制动态应用
Route::get(':dir/:class/:fun', ':dir.:class/:fun');Route::post(':dir/:class/:fun', ':dir.:class/:fun');
路由到类的方法
这种方式的路由可以支持执行任何类的方法,而不局限于执行控制器的操作方法。
动态方法
\完整类名@方法名 eg:
Route::get('blog/:id','\app\index\service\Blog@read');
静态方法
\完整类名::方法名 eg:
Route::get('blog/:id','\app\index\service\Blog::read');
路由重定向
可以直接使用redirect方法注册一个重定向路由
Route::redirect('blog/:id', 'http://blog.thinkphp.cn/read/:id', 302);
路由到模板
支持路由直接渲染模板输出。
// 路由到模板文件Route::view('hello/:name', 'index/hello');// 路由到模板、带变量Route::view('hello/:name', 'index/hello', ['city'=>'shanghai']);
表示该路由会渲染当前应用下面的view/index/hello.html模板文件输出。
在模板中可以输出name和city两个变量。
Hello,{$name}--{$city}!
路由到闭包
Route::get('hello', function () {return 'hello,world!';});
路由方法
如果要定义GET和POST请求支持的路由规则,可以用:
| 类型 | 描述 | 快捷方法 |
|---|---|---|
| GET | GET请求 | get |
| POST | POST请求 | post |
| PUT | PUT请求 | put |
| DELETE | DELETE请求 | delete |
| PATCH | PATCH请求 | patch |
| GET | 任何请求类型 | any |
域名路由
Route::domain('blog', function () {// 动态注册域名的路由规则Route::rule('new/:id', 'news/read');Route::rule(':user', 'user/info');});
URL生成
ThinkPHP支持路由URL地址的统一生成,并且支持所有的路由方式,以及完美解决了路由地址的反转解析,无需再为路由定义和变化而改变URL生成。
如果你开启了路由延迟解析,需要生成路由映射缓存才能支持全部的路由地址的反转解析。
use think\facade$url = (string) Route::buildUrl();// 使用函数助手$url = url();
