Autumn中文文档3:接收客户端数据

项目地址:https://github.com/bit128/autumn

core\http\Request模块封装了客户端的请求,在控制器中我们用它来获取来自客户端的请求参数。

接收POST和GET参数

有一个注册的action,需要接受客户端发来的账号和密码:

namespace app\controllers;
use core\Autumn;

class MyController extends \core\web\Controller
{
    public function actionRegister()
    {
        if (Autumn::app()->request->isPostRequest())
        {
            $account = Autumn::app()->request->getPost('account');
            $password = Autumn::app()->request->getPost('password');
            //具体注册业务逻辑...
        }

    }
}

通过isPostRequest()方法来判定这是一个POST请求,通过getPost()可以获取对应的参数。

HttpRequest提供的方法

isPostRequest() - true | false
判断是否是POST请求
getQuery( key, default = ”) 名称,默认值 mixed 获取GET参数
getPost( key, default = ”) 名称,默认值 mixed 获取POST请求参数
getParam( key, default = ”) 名称,默认值 mixed 获取GET\POST请求参数
setParam( key, value) 名称,值 - 设置一个参数到GET参数列表中
setSession( key, value) 名称,值 - 设置一个session键值对
getSession( key, default = ”) 名称,默认值 mixed 获取一个session值
destorySession() - - 销毁全部session
setCookie( key, value, limit=0)cookiegetCookir( key, default=)mixedcookiedeleteCookie( key) 名称 - 删除一个cookie
createToken() -
string
生成表单令牌
checkToken() - string 验证表单令牌
getAgent() - string 获取客户端浏览器名称
getIp() - string 获取客户端IP地址
getTime() - string 获取客户端请求时间

Url请求参数和action参数绑定

传统的url请求参数可能是这样子的:
http://127.0.0.1/user/find/?user_name=hongbo&user_gender=1
Autumn虽然也支持这种方式,但我们更建议你使用这样友好的目录形式参数:
http://127.0.0.1/user/find/user_name/hongbo/user/gender/1
以上的url中,user/是请求的控制器,find是执行的action。后面被Autumn理解为查询参数,必须成对出现。

要获取这些查询参数,可以使用HttpRequest中的getQuery()方法。和getPost()一样,它还提供一个默认的参数,当url中的查询参数不存在的时候,使用默认参数来代替。

<?php
namespace app\controllers;
use core\Autumn;

class UserController extends \core\web\Controller
{
    public function actionFind()
    {
        echo Autumn::app()->request->getQuery('user_name', 'hongbo');
    }
}

我们在浏览器中输入:http://127.0.0.1/user/find 的时候用,会输出’hongbo’。因为url中这个参数不存在,所以输出了默认参数’hongbo’。

另外控制器中的action也支持参数绑定。具体我们看例子:

<?php
namespace app\controllers;
use core\Autumn;

class UserController extends \core\web\Controller
{
    public function actionFind($user_name, $user_age)
    {
        echo 'name: ', $user_name, ' age: ', $user_age;
    }
}

通过浏览器这样访问:http://127.0.0.1/user/find/user_age/18/user_name/hongbo
页面会输出:name: hongbo age:18
你会发现action中的参数顺序和url中的参数不必一致。

表单令牌

Request提供了表单令牌功能,我们可以在form表单中生成一令牌:

<form action="/site/test" method="post">
    <input type="text" name="user_name">
    <?php echo \core\Autumn::app()->request->createToken(); ?>
    <button type="submit">提交</button>
</form>

然后在控制器中这样来校验令牌:

public function actionTest()
{
    if (Autumn::app()->request->isPostRequest())
    {
        if (Autumn::app()->request->checkToken())
        {
            echo '令牌正确';
        }
        else
        {
            echo '令牌错误';
        }
    }
}

需要注意的是autumn提供的令牌机制不支持并发的表单提交。开发者需要保证生成的令牌和校验的令牌是同一个。举个例子,开发者先创建了一个令牌A,在没有提交表单并校验之前,又重复创建了一个令牌B。这时候令牌A就失效了,框架在校验开发者的令牌时,只接受令牌B。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值