diff --git a/laravel/documentation/changes.md b/laravel/documentation/changes.md index a7c6724e..490fb25d 100644 --- a/laravel/documentation/changes.md +++ b/laravel/documentation/changes.md @@ -69,6 +69,7 @@ ## Laravel 3.2 - New, driver based authentication system. - Added Input::json() method for working with applications using Backbone.js or similar. - Added Response::json method for creating JSON responses. +- Added Response::eloquent method for creating Eloquent responses. ## Upgrading From 3.1 diff --git a/laravel/helpers.php b/laravel/helpers.php index 3e49f047..e4d56b37 100644 --- a/laravel/helpers.php +++ b/laravel/helpers.php @@ -245,6 +245,22 @@ function array_pluck($array, $key) }, $array); } +/** + * Transform Eloquent models to a JSON object. + * + * @param Eloquent|array $models + * @return object + */ +function eloquent_to_json($models) +{ + if ($models instanceof Eloquent) + { + return json_encode($models->to_array()); + } + + return json_encode(array_map(function($m) { return $m->to_array(); }, $models)); +} + /** * Determine if "Magic Quotes" are enabled on the server. * diff --git a/laravel/response.php b/laravel/response.php index acca8a37..e5472430 100644 --- a/laravel/response.php +++ b/laravel/response.php @@ -82,7 +82,7 @@ public static function view($view, $data = array()) * Create a new JSON response. * * - * // Create a response instance with a view + * // Create a response instance with JSON * return Response::json($data, 200, array('header' => 'value')); * * @@ -98,6 +98,26 @@ public static function json($data, $status = 200, $headers = array()) return new static(json_encode($data), $status, $headers); } + /** + * Create a new response of JSON'd Eloquent models. + * + * + * // Create a new response instance with Eloquent models + * return Response::eloquent($data, 200, array('header' => 'value')); + * + * + * @param Eloquenet|array $data + * @param int $status + * @param array $headers + * @return Response + */ + public static function eloquent($data, $status = 200, $headers = array()) + { + $headers['Content-Type'] = 'application/json'; + + return new static(eloquent_to_json($data), $status, $headers); + } + /** * Create a new error response instance. *