文件位置

配置文件

config/router.php
或者
app/app_name/router.php

路由定义

router/app.php或者app/app_name/router/router.php
模板内容:

  1. <?php
  2. use think\facade\Route;
  3. Route::get('/', 'Index');
  4. Route::get('dd', 'Index/ad');

注意事项

  • 要使用Route类注册路由必须首先在路由定义文件开头添加引用
  • 启用多应用后,默认应用有BUG,路由访问不到。临时解决方案是再起一个入口文件public/app_name.php,直接把public/index.php复制一份即可。

    注册路由

    最基础的路由定义方法是:

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

  1. // 注册路由到News控制器的read操作
  2. Route::rule('new/:id','News/read');

http://serverName/news/read/id/5——>http://serverName/new/5

  1. Route::rule('new/:id', 'News/update', 'POST');

表示定义的路由规则在POST请求下才有效。

变量规则

设置全局变量规则,全部路由有效

  1. // 支持批量添加
  2. Route::pattern([
  3. 'name' => '\w+',
  4. 'id' => '\d+',
  5. ]);

组合变量

  1. Route::get('item<name><id>', 'product/detail')
  2. ->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']);
  3. Route::get('item@<name>-<id>', 'product/detail')
  4. ->pattern(['name' => '\w+', 'id' => '\d+']);

动态路由

  1. // 定义动态路由 控制器中用request->param('name')获取name
  2. Route::get('hello/:name', 'index/:name/hello');

多级控制器

  1. Route::get('blog/:id','group.Blog/read');

表示路由到下面的控制器类,

  1. index/controller/group/Blog

还可以支持路由到动态的应用、控制器或者操作,例如:

  1. // action变量的值作为操作方法传入
  2. Route::get(':action/blog/:id', 'Blog/:action');

多级控制动态应用

  1. Route::get(':dir/:class/:fun', ':dir.:class/:fun');
  2. Route::post(':dir/:class/:fun', ':dir.:class/:fun');

路由到类的方法

这种方式的路由可以支持执行任何类的方法,而不局限于执行控制器的操作方法。

动态方法

\完整类名@方法名 eg:

  1. Route::get('blog/:id','\app\index\service\Blog@read');

静态方法

\完整类名::方法名 eg:

  1. Route::get('blog/:id','\app\index\service\Blog::read');

路由重定向

可以直接使用redirect方法注册一个重定向路由

  1. Route::redirect('blog/:id', 'http://blog.thinkphp.cn/read/:id', 302);

路由到模板

支持路由直接渲染模板输出。

  1. // 路由到模板文件
  2. Route::view('hello/:name', 'index/hello');
  3. // 路由到模板、带变量
  4. Route::view('hello/:name', 'index/hello', ['city'=>'shanghai']);

表示该路由会渲染当前应用下面的view/index/hello.html模板文件输出。
在模板中可以输出name和city两个变量。

  1. Hello,{$name}--{$city}!

路由到闭包

  1. Route::get('hello', function () {
  2. return 'hello,world!';
  3. });

路由方法

如果要定义GETPOST请求支持的路由规则,可以用:

类型 描述 快捷方法
GET GET请求 get
POST POST请求 post
PUT PUT请求 put
DELETE DELETE请求 delete
PATCH PATCH请求 patch
GET 任何请求类型 any

域名路由

  1. Route::domain('blog', function () {
  2. // 动态注册域名的路由规则
  3. Route::rule('new/:id', 'news/read');
  4. Route::rule(':user', 'user/info');
  5. });

URL生成

ThinkPHP支持路由URL地址的统一生成,并且支持所有的路由方式,以及完美解决了路由地址的反转解析,无需再为路由定义和变化而改变URL生成。

如果你开启了路由延迟解析,需要生成路由映射缓存才能支持全部的路由地址的反转解析。

  1. use think\facade
  2. $url = (string) Route::buildUrl();
  3. // 使用函数助手
  4. $url = url();