Browse Source

added Response::eloquent method.

Taylor Otwell 12 years ago
parent
commit
9ed91af1e8
3 changed files with 38 additions and 1 deletions
  1. 1 0
      laravel/documentation/changes.md
  2. 16 0
      laravel/helpers.php
  3. 21 1
      laravel/response.php

+ 1 - 0
laravel/documentation/changes.md

@@ -69,6 +69,7 @@
 - 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.
 
 <a name="upgrade-3.2"></a>
 ## Upgrading From 3.1

+ 16 - 0
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.
  *

+ 21 - 1
laravel/response.php

@@ -82,7 +82,7 @@ class Response {
 	 * Create a new JSON response.
 	 *
 	 * <code>
-	 *		// Create a response instance with a view
+	 *		// Create a response instance with JSON
 	 *		return Response::json($data, 200, array('header' => 'value'));
 	 * </code>
 	 *
@@ -98,6 +98,26 @@ class Response {
 		return new static(json_encode($data), $status, $headers);
 	}
 
+	/**
+	 * Create a new response of JSON'd Eloquent models.
+	 *
+	 * <code>
+	 *		// Create a new response instance with Eloquent models
+	 *		return Response::eloquent($data, 200, array('header' => 'value'));
+	 * </code>
+	 *
+	 * @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.
 	 *