1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- <?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 [];
- }
- }
- }
|