62 lines
1.7 KiB
PHP
62 lines
1.7 KiB
PHP
<?php
|
|
/**
|
|
* @link http://www.yiiframework.com/
|
|
* @copyright Copyright (c) 2008 Yii Software LLC
|
|
* @license http://www.yiiframework.com/license/
|
|
*/
|
|
|
|
namespace yii\web;
|
|
|
|
use yii\base\InvalidArgumentException;
|
|
use yii\helpers\Json;
|
|
|
|
/**
|
|
* Parses a raw HTTP request using [[\yii\helpers\Json::decode()]].
|
|
*
|
|
* To enable parsing for JSON requests you can configure [[Request::parsers]] using this class:
|
|
*
|
|
* ```php
|
|
* 'request' => [
|
|
* 'parsers' => [
|
|
* 'application/json' => 'yii\web\JsonParser',
|
|
* ]
|
|
* ]
|
|
* ```
|
|
*
|
|
* @author Dan Schmidt <danschmidt5189@gmail.com>
|
|
* @since 2.0
|
|
*/
|
|
class JsonParser implements RequestParserInterface
|
|
{
|
|
/**
|
|
* @var bool whether to return objects in terms of associative arrays.
|
|
*/
|
|
public $asArray = true;
|
|
/**
|
|
* @var bool whether to throw a [[BadRequestHttpException]] if the body is invalid json
|
|
*/
|
|
public $throwException = true;
|
|
|
|
|
|
/**
|
|
* Parses a HTTP request body.
|
|
* @param string $rawBody the raw HTTP request body.
|
|
* @param string $contentType the content type specified for the request body.
|
|
* @return array parameters parsed from the request body
|
|
* @throws BadRequestHttpException if the body contains invalid json and [[throwException]] is `true`.
|
|
*/
|
|
public function parse($rawBody, $contentType)
|
|
{
|
|
try {
|
|
$parameters = Json::decode($rawBody, $this->asArray);
|
|
return $parameters === null ? [] : $parameters;
|
|
} catch (InvalidArgumentException $e) {
|
|
if ($this->throwException) {
|
|
throw new BadRequestHttpException('Invalid JSON data in request body: ' . $e->getMessage());
|
|
}
|
|
|
|
return [];
|
|
}
|
|
}
|
|
}
|