您的位置:首页 > 其它

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

2017-04-25 10:58 330 查看
项目地址: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)键,值,有效时间−设置一个cookie键值对getCookir(key, default=”)名称,默认值mixed获取一个cookie值deleteCookie(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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文档