1、请求变量与请求对象的关系?
TP5提供了请求对象,对客户端发送的请求提供统一的接口进行处理,当用户向服务器发出了请求,请求对象就会自动拦截这些请求,调用响应的方法进行处理。
例如GET
请求就会调用get()
方法,POST
请求就会调用post()
方法,如果是cookie
或者session
就会调用各自对应的方法。
这些请求方法会自动过滤掉非法请求,使得发送到服务器端的请求更加的安全可靠。
那么什么是请求变量呢,我们来通过一个小案例的演示说明一下,修改默认模块默认控制器Index
的内容:
class Index
{
public function index()
{
return '<h2>快来和我一起学习TP5</h2>';
}
public function hello($name,$lesson)
{
return 'Hello '.$name.' ,欢迎和我一起学习'.$lesson.'课程';
}
}
访问url
为:http://tp5.com/index/index/hello/name/Mike/lesson/TP5
,其中Mike
和TP5
就是请求变量,所以说请求变量就是请求对象处理的一个目标,但是请求对象不仅仅可以处理请求变量,它可以处理一切与用户请求相关的数据。
get()
新增一个新的方法:
public function demo($id='',$name='',$age=18)
{
$request = \think\Request::instance();//获取请求对象实例,将请求对象类实例化
dump($request->get());//调用请求对象的get()获取url中的get请求的请求变量,get方法参数为空则获取url中所有请求变量
}
现在我们将url
的参数传递方式改成get
方式:
http://tp5.com/index/index/demo?id=123&name=alice&age=28
结果输出了所有url中的get请求的所有请求变量。
post()
我们再来尝试获取POST
请求的所有请求变量,把请求对象调用的方法改成post
即可:dump($request->post());
,这里我图方便,用Postman
来请求:
也能正常输出了所有url中的post请求的所有请求变量。
param()
为了简化请求变量的获取,系统还提供了param()
方法来获取所有请求方式的请求变量,包括get
、post
、PATH_INFO
类型,很简单,修改请求对象调用param()
方法即可:dump($request->param());
。
然后用各种方式去请求,发现都能正常输出了所有请求变量。
get()
、post()
、param()
参数都可以为想要获取到的请求变量的名称。
has()
为了判断url
请求中是否存在某个请求变量,系统还提供了has()
方法,返回值为布尔值,即存在某个请求变量为true
,反之为false
。
2、请求信息包括哪些?
其实我们通过请求对象获取的请求信息是非常多的,主要有以下几种:
a. 和url
相关:
例如获取域名:
dump($request->domain()); //获取域名
例如获取url
:
dump($request->url()); //获取url,默认不包含域名,如果要包含域名,则需要传入参数true
例如获取PATH_INFO
:
dump($request->pathinfo()); //获取pathinfo
例如获取url
后缀:
dump($request->ext()); //获取url后缀
b. 和MCA
相关;
例如获取模块:
dump($request->module()); //获取模块
例如获取控制器:
dump($request->controller()); //获取控制器
例如获取操作:
dump($request->action()); //获取操作
我们除了可以查看
MCA
信息之外,还可以设置,比如说我们将当前操作重新设置一下:
$request->action('test'); //设置操作为test
同理,除了操作可以设置,模块、控制器都能重新设置,方法也是一样的,就不演示了。
c. 和请求的方法类型相关;
我们还能检测请求的方法类型:
dump($request->method()); //获取请求变量的类型,输出string(3) "GET"
我们还能检测请求的IP:
dump($request->ip()); //获取请求的IP,输出string(7) "0.0.0.0"
我们还能检测请求的IP:
dump($request->ip()); //获取请求的IP,输出string(7) "0.0.0.0"
除了可以获取以上请求变量以外,请求变量还支持对请求变量的限定和排除:
dump($request->only('id')); //限定仅获取请求变量id
dump($request->except('id')); //获取除了请求变量id之外的其他变量
3、如何通过参数绑定来简化请求的URL地址呢?
默认url
的参数是按名称成对解析,所以需要写上参数名:
http://tp5.com/index/index/demo/id/123/name/alice/age/28
但是,还有另一种配置是按顺序解析,这个需要先配置url_param_type
配置项的值为1
,即按顺序解析。
那么url
就可以简化为:
http://tp5.com/index/index/demo/123/alice/28
网友评论