请求
请求信息
- 可以通过
\think\Request
类或者助手函数request()
进行获取URL相关信息
示例:
<?php
namespace app\index\controller;
use \think\Request;
class Index{
public function index(){
// $request = Request::instance();//通过Request类获取请求对象
$request = Request::instance();//通过助手函数request()获取请求对象
echo "域名:".$request->domain()."<br>";//获取域名
echo "入口文件:".$request->baseFile()."<br>";//获取入口文件名
echo "当前访问url,不含域名:".$request->url()."<br>";//获取当前URL地址,不含域名
echo "当前访问url,含域名:".$request->url(true)."<br>";//获取当前URL地址,含域名
echo "url的ROOT地址,不含域名:".$request->root()."<br>";//获取url的ROOT;
echo "url的ROOT地址,含域名:".$request->root(true)."<br>";//获取url的ROOT;
echo "获取url中的PATH_INFO信息,含后缀:".$request->pathinfo()."<br>";//获取地址PATH_INFO信息,不含后缀
echo "获取url中的PATH_INFO信息,不含后缀:".$request->path()."<br>";//获取地址PATH_INFO信息,含后缀
echo "获取url中的后缀信息:".$request->ext()."<br>";//获取url后缀信息
}
}
- 另外,还可以继承
Controller
基类后,使用基类的request
属性进行调用
<?php
namespace app\index\controller;
use \think\Controller;
class Index extends Controller{
public function index(){
$request = $this->request;
echo "域名:".$request->domain()."<br>";//获取域名
echo "入口文件:".$request->baseFile()."<br>";//获取入口文件名
echo "当前访问url,不含域名:".$request->url()."<br>";//获取当前URL地址,不含域名
echo "当前访问url,含域名:".$request->url(true)."<br>";//获取当前URL地址,含域名
echo "url的ROOT地址,不含域名:".$request->root()."<br>";//获取url的ROOT;
echo "url的ROOT地址,含域名:".$request->root(true)."<br>";//获取url的ROOT;
echo "获取url中的PATH_INFO信息,含后缀:".$request->pathinfo()."<br>";//获取地址PATH_INFO信息,不含后缀
echo "获取url中的PATH_INFO信息,不含后缀:".$request->path()."<br>";//获取地址PATH_INFO信息,含后缀
echo "获取url中的后缀信息:".$request->ext()."<br>";//获取url后缀信息
}
}
URL访问
http://www.tp5.com/public/index.html
输出结果
域名:http://www.tp5.com
入口文件:/public/index.php
当前访问url,不含域名:/public/index.html
当前访问url,含域名:http://www.tp5.com/public/index.html
url的ROOT地址,不含域名:/public
url的ROOT地址,含域名:http://www.tp5.com/public
获取url中的PATH_INFO信息,含后缀:index.html
获取url中的PATH_INFO信息,不含后缀:index
获取url中的后缀信息:html
请求方法和属性注入
可以实现数据共享,注入必须写在应用目录的common.php
中,下面与给Request
类注册一个userName
属性和getUserName
方法示例
// 应用公共文件
use think\Request;
$request = Request::instance();//获取请求对象实例
$request->userName = 'rufeike';//请求对象的属性注入
//请求注入的方法
function getUserName(Request $request){//注意,需要进行请求对象约束
return $request->userName;
}
//注册请求对象的方法(钩子)
Request::hook('getUserName','getUserName');
控制器中调用属性和方法
<?php
namespace app\index\controller;
use \think\Controller;
use \think\Request;
class Index extends Controller{
public function index(){
$request = Request::instance();
echo "注入属性:".$request->userName."<br>";
echo "注入方法:".$request->getUserName();
}
}
输出结果
注入属性:rufeike
注入方法:rufeike
请求依赖对象注入
在公共文件common.php
进行请求属性和方法注入会影响效率,tp官方推荐采用依赖对象注入的方式。在不继承基础类Controller
的前提下,可以单独指定需要注入的方法也可以在类构造方法中注入,实现类内共享。
- 方法依赖注入方式
<?php
namespace app\index\controller;
use \think\Request;
class Index{
public function index(Request $request){//方法依赖注入
dump($request->param());
}
}
- 类共享注入方式
<?php
namespace app\index\controller;
use \think\Request;
class Index{
protected $request;
public function __construct(Request $request){//构造方法注入
$this->request = Request::instance();
}
public function index(){
dump($this->request->param());
}
}
URL访问
http://www.tp5.com/public/index/index/index/name/rufeik
输出结果
array(1) {
["name"] => string(6) "rufeik"
}