ThinkPHP5 表单请求和验证 - 01
请求类型
表单验证的第一步是判断表单提交类型,在请求对象一讲中我们已经掌握了判断请求类型的方法,在 RESTFul
设计的架构规范中,不同的请求类型的用途是不同的,应当尽量遵守,建议的规范是:
请求类型 | 用途 |
---|---|
GET | 读取资源 |
POST | 创建资源 |
PUT | 更新资源 |
PATCH | 更新部分资源 |
DELETE | 删除资源 |
资源控制器使用的规范就是上述规范,不过需要注意的是,对资源的 CURD
并不一定是数据库的 CURD
,例如软删除对于资源来说是删除操作,但对于数据库来说其实是更新操作,但软删除的请求类型的规范还是使用的DELETE
。
伪装请求有时候在客户端需要使用 PUT
或者 DELETE
请求更新数据,但表单又不支持直接这类请求类型,这个时候我们可以使用请求伪装功能。
支持两种方式的请求类型伪装:隐藏表单域伪装和请求头伪装。
请求伪装功能的表单提交方式必须使用 POST
,然后增加一个隐藏表单域 _method
,其值就是你要伪装的请求类型(不区分大小写),
例如直接粘贴以下内容到view/index/index.html:
<form method="post" action="">
<input type="text" name="name" value="Hello">
<input type="hidden" name="_method" value="put" >
<input type="submit" value="提交">
</form>
直接粘贴以下内容到默认控制器index/index/index.php
<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
class Index extends Controller
{
public function index(Request $request)
{
echo '当前请求类型:' . $request->method() . '<br/>实际请求类型:' . $request->method(true);
return $this->fetch();
}
}
提交的请求类型会被识别为 PUT
请求类型,隐藏域的名称支持自定义
如果想修改_method标签<input type="hidden" name="_method" value="put" >可以通过设置:
// 定义请求类型伪装的变量名
'var_method' => '_m',
请求伪装的表单隐藏域就可以改为:
<input type="hidden" name="_m" value="put" >
第二种请求类型伪装的方式是指定请求头信息,例如我们通过发送 X-HTTP-Method-Override头信息为 put来模拟 PUT请求。
模拟AJAX除了伪装请求类型外,我们还可以模拟AJAX请求来进行一些API接口的测试。
测试代码如下:
<?php
namespace app\index\controller;
use think\Request;
class Index
{
public function index(Request $request)
{
if ($request->isAjax()) {
return 'AJAX';
} else {
return 'NOT AJAX';
}
}
}
使用postman,METHOD请求方法随便选择,测试如下:
当模拟AJAX请求返回的字符串加上了双引号是因为受默认配置default_ajax_return的影响,被自动转换为json格式输出了。