扩展了一下 getRules 时 input 数据的解析,特发来交流一下

由于在项目中遇到了其他语言请求接口时发送数据为 input 的方式 因此专门写了一下针对 input 参数无法接收的问题的解决方案,多提宝贵意见
<?php
/**
* Created by PhpStorm.
* User: jiang
* Date: 2018/3/5
* Time: 14:48
*/

namespace App\Common;
use function PhalApi\T;
use PhalApi\Exception\InternalServerErrorException;
use PhalApi\Request;
class MyRequest extends Request {

/**
* @var string $input 输入流 php://input
*/
protected $input = array();

public function __construct(array $data = NULL)
{
parent::__construct($data);
}

/**
* 根据来源标识获取数据集
```
* |----------|---------------------|
* | post | $_POST |
* | get | $_GET |
* | cookie | $_COOKIE |
* | server | $_SERVER |
* | request | $_REQUEST |
* | header | $_SERVER['HTTP_X'] |
* | input | php://input |
* |----------|---------------------|
*
```
* - 当需要添加扩展其他新的数据源时,可重载此方法
*
* @throws InternalServerErrorException
* @return array
*/
protected function &getDataBySource($source)
{
//判断是否是新增的数据来源
if (strtoupper($source) == 'INPUT') {
$this->input = $this->paramInput();
return $this->input;
}
return parent::getDataBySource($source); // TODO: Change the autogenerated stub
}

/**
* 解析input输入流
*/
protected function paramInput() {
$result = @file_get_contents("php://input", 'r');
$result = json_decode($result, true);
if (!$result) {
//如果不是json数据,抛出异常
throw new InternalServerErrorException
(T('不支持的数据结构,数据流默认只支持json结构'));
} else {
return $result;
}
}
}

2 个评论

不错的分源,有需要的同学可参考下。
感谢楼主给的帮助

要回复文章请先登录注册