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();
    }
}

ThinkPHP5 表单请求和验证 - 01

提交的请求类型会被识别为 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请求。

ThinkPHP5 表单请求和验证 - 01

模拟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请求方法随便选择,测试如下:

ThinkPHP5 表单请求和验证 - 01

当模拟AJAX请求返回的字符串加上了双引号是因为受默认配置default_ajax_return的影响,被自动转换为json格式输出了。