12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- <?php
-
- namespace Illuminate\Http;
-
- use ArrayObject;
- use JsonSerializable;
- use Illuminate\Support\Traits\Macroable;
- use Illuminate\Contracts\Support\Jsonable;
- use Illuminate\Contracts\Support\Arrayable;
- use Illuminate\Contracts\Support\Renderable;
- use Symfony\Component\HttpFoundation\Response as BaseResponse;
-
- class Response extends BaseResponse
- {
- use ResponseTrait, Macroable {
- Macroable::__call as macroCall;
- }
-
- /**
- * Set the content on the response.
- *
- * @param mixed $content
- * @return $this
- */
- public function setContent($content)
- {
- $this->original = $content;
-
- // If the content is "JSONable" we will set the appropriate header and convert
- // the content to JSON. This is useful when returning something like models
- // from routes that will be automatically transformed to their JSON form.
- if ($this->shouldBeJson($content)) {
- $this->header('Content-Type', 'application/json');
-
- $content = $this->morphToJson($content);
- }
-
- // If this content implements the "Renderable" interface then we will call the
- // render method on the object so we will avoid any "__toString" exceptions
- // that might be thrown and have their errors obscured by PHP's handling.
- elseif ($content instanceof Renderable) {
- $content = $content->render();
- }
-
- parent::setContent($content);
-
- return $this;
- }
-
- /**
- * Determine if the given content should be turned into JSON.
- *
- * @param mixed $content
- * @return bool
- */
- protected function shouldBeJson($content)
- {
- return $content instanceof Arrayable ||
- $content instanceof Jsonable ||
- $content instanceof ArrayObject ||
- $content instanceof JsonSerializable ||
- is_array($content);
- }
-
- /**
- * Morph the given content into JSON.
- *
- * @param mixed $content
- * @return string
- */
- protected function morphToJson($content)
- {
- if ($content instanceof Jsonable) {
- return $content->toJson();
- } elseif ($content instanceof Arrayable) {
- return json_encode($content->toArray());
- }
-
- return json_encode($content);
- }
- }
|