如果要获取当前的请求信息,可以使用\think\Request类,除了下文中的

  1. $request = Request::instance();

也可以使用助手函数

  1. $request = request();
当然,最方便的还是使用注入请求对象的方式来获取变量。

例如:

获取URL信息

  1. $request = Request::instance();
  2. // 获取当前域名
  3. echo 'domain: ' . $request->domain() . '<br/>';
  4. // 获取当前入口文件
  5. echo 'file: ' . $request->baseFile() . '<br/>';
  6. // 获取当前URL地址 不含域名
  7. echo 'url: ' . $request->url() . '<br/>';
  8. // 获取包含域名的完整URL地址
  9. echo 'url with domain: ' . $request->url(true) . '<br/>';
  10. // 获取当前URL地址 不含QUERY_STRING
  11. echo 'url without query: ' . $request->baseUrl() . '<br/>';
  12. // 获取URL访问的ROOT地址
  13. echo 'root:' . $request->root() . '<br/>';
  14. // 获取URL访问的ROOT地址
  15. echo 'root with domain: ' . $request->root(true) . '<br/>';
  16. // 获取URL地址中的PATH_INFO信息
  17. echo 'pathinfo: ' . $request->pathinfo() . '<br/>';
  18. // 获取URL地址中的PATH_INFO信息 不含后缀
  19. echo 'pathinfo: ' . $request->path() . '<br/>';
  20. // 获取URL地址中的后缀信息
  21. echo 'ext: ' . $request->ext() . '<br/>';

输出结果为:

  1. domain: http://tp5.com
  2. file: /index.php
  3. url: /index/index/hello.html?name=thinkphp
  4. url with domain: http://tp5.com/index/index/hello.html?name=thinkphp
  5. url without query: /index/index/hello.html
  6. root:
  7. root with domain: http://tp5.com
  8. pathinfo: index/index/hello.html
  9. pathinfo: index/index/hello
  10. ext: html

设置/获取 模块/控制器/操作名称

  1. $request = Request::instance();
  2. echo "当前模块名称是" . $request->module();
  3. echo "当前控制器名称是" . $request->controller();
  4. echo "当前操作名称是" . $request->action();

如果当前访问的地址是 http://serverName/index.php/index/hello_world/index输出结果为:

  1. 当前模块名称是index
  2. 当前控制器名称是HelloWorld
  3. 当前操作名称是index

设置模块名称值需要向module方法中传入名称即可,同样使用于设置控制器名称和操作名称

  1. Request::instance()->module('module_name');

获取请求参数

  1. $request = Request::instance();
  2. echo '请求方法:' . $request->method() . '<br/>';
  3. echo '资源类型:' . $request->type() . '<br/>';
  4. echo '访问ip地址:' . $request->ip() . '<br/>';
  5. echo '是否AJax请求:' . var_export($request->isAjax(), true) . '<br/>';
  6. echo '请求参数:';
  7. dump($request->param());
  8. echo '请求参数:仅包含name';
  9. dump($request->only(['name']));
  10. echo '请求参数:排除name';
  11. dump($request->except(['name']));

输出结果为:

  1. 请求方法:GET
  2. 资源类型:html
  3. 访问ip地址:127.0.0.1
  4. 是否Ajax请求:false
  5. 请求参数:
  6. array (size=2)
  7. 'test' => string 'ddd' (length=3)
  8. 'name' => string 'thinkphp' (length=8)
  9. 请求参数:仅包含name
  10. array (size=1)
  11. 'name' => string 'thinkphp' (length=8)
  12. 请求参数:排除name
  13. array (size=1)
  14. 'test' => string 'ddd' (length=3)

获取路由和调度信息

hello方法修改如下:

  1. $request = Request::instance();
  2. echo '路由信息:';
  3. dump($request->route());
  4. echo '调度信息:';
  5. dump($request->dispatch());

路由定义为:

  1. return [
  2. 'hello/:name' =>['index/hello',[],['name'=>'\w+']],
  3. ];

访问下面的URL地址:

  1. http://serverName/hello/thinkphp

输出信息为:

  1. 路由信息:
  2. array (size=4)
  3. 'rule' => string 'hello/:name' (length=11)
  4. 'route' => string 'index/hello' (length=11)
  5. 'pattern' =>
  6. array (size=1)
  7. 'name' => string '\w+' (length=3)
  8. 'option' =>
  9. array (size=0)
  10. empty
  11. 调度信息:
  12. array (size=2)
  13. 'type' => string 'module' (length=6)
  14. 'module' =>
  15. array (size=3)
  16. 0 => null
  17. 1 => string 'index' (length=5)
  18. 2 => string 'hello' (length=5)

设置请求信息

如果某些环境下面获取的请求信息有误,可以手动设置这些信息参数,使用下面的方式:

  1. $request = Request::instance();
  2. $request->root('index.php');
  3. $request->pathinfo('index/index/hello');