账户中心 退出系统
开发文档 资讯·分享 技术交流 会员登录
phpGrace GSCMS 公众号系统
资源方法

请求资源概述

Http 请求定义了与服务器交互的不同方法,最基本的方法有4种,分别是 GET,POST,PUT,DELETE 。
GET 用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE 用来删除资源。

为什么使用资源请求函数

1 隐藏业务方法,url 无法直接运行请求函数,使得安全性更好;
2 简化 url 并实现资源请求逻辑分离;

GET 请求

phpGrace 对 GET 请求不做任何处理,遵守URL及路由解析规则,同时会自动调用控制器的 __display() 方法进行模板展示;

POST 请求

phpGrace 会自动识别 POST 请求,一般情况下我们会利用 POST 新增数据,识别 POST 请求后:

1 控制器不会调用 __display() 方法;
2 尝试调用控制器的 __方法名称POST() 函数 ( 如果此函数被定义 );
3 自动传递基础函数的参数到 __方法名称POST() 方法;

如 : 发送一个 POST 请求到 url : index/index,框架运行过程如下 :

1 进入 index 控制器,执行 index 函数,注意不会执行与 index 方法对应的 __display() 函数;
2 尝试调用 index 控制器的 __indexPOST 函数( 如果此函数被定义 );
3 将 index控制器/index函数的参数保存到控制器的 parameters 属性内 [ 数组形式 ],其他方法可以共享此属性;
4 使用 $_POST 获取 post 数据;

例子

// 控制器
<?php
namespace grace\controller;
use grace\grace;
use grace\tool\dir;

class index extends grace{
    // 默认 index 方法,用来展示视图和一些基础操作
    public function index(dir $dir, $name = 'grace', $age = 10){
        // 自动调用视图文件 index/index.php
    }
    
    // 当接收到 POST 请求时执行的方法
    public function __indexPOST(){
        // 演示如何接收、使用 index 基础函数的参数
        print_r($_POST);
        var_dump($this->parameters);
        exit;
    }
}

// 视图
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<link rel="stylesheet" type="text/css" href="/static/main.css" />
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/3.1.0/jquery-3.1.0.min.js"></script>
</head>
<body>
<div style="padding:100px;">
    <div>表单 POST 提交</div>
    <div>
        <form method="post">
            <input name="name" />
            <button type="submit">POST 提交</button>
        </form>
    </div>
</div>
</body>
</html>


PUT 请求

phpGrace 会自动识别 PUT 请求,一般情况下我们会利用 PUT 更新数据,识别 PUT 请求后:

1 控制器不会调用 __display() 方法;
2 尝试调用控制器的 __方法名称PUT() 函数 ( 如果此函数被定义 );
3 自动传递基础函数的参数到 __方法名称PUT() 方法;
4 使用 $this->put 属性获取 PUT 数据;

如 : 发送一个 PUT 请求到 url : index/edit/id/10,框架运行过程如下 :

1 进入 index 控制器,执行 edit 函数,不会执行 index 控制器 edit 函数对应的 __display() 函数;
2 尝试调用 index 控制器的 __indexPUT 函数( 如果此函数被定义 );
3 将 index控制器/index函数的参数保存到控制器的 parameters 属性内 [ 数组形式 ],其他方法可以共享此属性;
4 将 put 数据保存至控制器的 put 属性;
注意 put 数据默认会被安全字符转义,如果不需要转义请定义控制器 filterPUT 属性为 false;

例子 ( 通过浏览器控制台观察效果 ) 

<?php
namespace grace\controller;
use grace\grace;

class index extends grace{

    // 默认 edit 方法,用来展示视图和一些基础操作
    public function edit($id, $name = 'grace'){
        // 自动调用视图文件 index/edit.php
    }

    // 当 接收到 POST 请求时执行的方法
    public function __editPUT(){
        // 函数的参数
        echo '基础函数 edit 的参数:<br />';
        var_dump($this->parameters);
        echo '$_GET:<br />';
        // $_GET
        var_dump($_GET);
        echo 'PUT 数据:<br />';
        // PUT 数据
        var_dump($this->put);
        exit;
    }
}

// 视图 edit.php
// 利用 ajax 实现 put 请求
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
    <link rel="stylesheet" type="text/css" href="/static/main.css" />
    <script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/3.1.0/jquery-3.1.0.min.js"></script>
</head>
<body>
<div style="padding:100px;">
</div>
<script>
    $.ajax({
        // 此处注意 id 为 基础函数 edit 要求的、必须传递的数据
        url: '/index/edit/id/<?php echo $_GET['id'];?>',
        type: 'PUT',
        data:{content:"c?a0==00&n=2", address:'北京<>'},
        success: function(res) {
            console.log(res);
        }
    });
</script>
</body>
</html>

DELETE 请求

phpGrace 会自动识别 DELETE 请求,一般情况下我们会利用 DELETE 删除数据,识别 DELETE 请求后:

1 控制器不会调用 __display() 方法;
2 尝试调用控制器的 __方法名称DELETE() 函数 ( 如果此函数被定义 );
3 自动传递基础函数的参数到 __方法名称DELETE() 方法;

如 : 发送一个 DELETE 请求到 url : index/index/id/1,框架运行过程如下 :

1 进入 index 控制器,执行 index 函数,不会执行 index 控制器 index 函数对应的 __display() 函数;
2 尝试调用 index 控制器的 __indexDELETE 函数( 如果此函数被定义 );
3 将 index控制器/index函数的参数保存到控制器的 parameters 属性内 [ 数组形式 ],其他方法可以共享此属性;
注意事项

__方法名称DELETE() 会执行默认的路由方法,如果默认方法中有数据读取、逻辑运算等与DELETE操作并不相关的操作,那么使用 GET 方式实现 delete 功能才更合理;


例子 ( 通过浏览器控制台观察效果 ) 

// 控制器代码
<?php
namespace grace\controller;
use grace\grace;

class index extends grace{

    // 默认 index 方法,用来展示视图和一些基础操作
    public function index($name = 'test'){
        // 自动调用视图文件 index/edit.php
    }

    // 当 接收到 POST 请求时执行的方法
    public function __indexDELETE(){
        // $_GET
        echo '$_GET:<br />';
        var_dump($_GET);
        // index 基础控制器参数
        var_dump($this->parameters);
        exit;
    }
}

// 视图代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<link rel="stylesheet" type="text/css" href="/static/main.css" />
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/3.1.0/jquery-3.1.0.min.js"></script>
</head>
<body>
<div style="padding:100px;">
    <ul>
        <li id="li1">小花 <a href="javascript:deleteItem(1);">删除</a></li>
        <li id="li2">小明 <a href="javascript:deleteItem(2);">删除</a></li>
    </ul>
</div>
<script>
function deleteItem(id){
    $.ajax({
        url:"/index/index/id/"+id,
        type: "DELETE",
        data: {name: 'test'},
        success: function (res) {
            console.log(res);
            $('#li'+id).remove();
        }
    });
}
</script>
</body>
</html>