Browse Source

added support for controller factories.

Taylor Otwell 13 years ago
parent
commit
e70261e962
2 changed files with 18 additions and 4 deletions
  1. 1 1
      laravel/event.php
  2. 17 3
      laravel/routing/controller.php

+ 1 - 1
laravel/event.php

@@ -83,7 +83,7 @@ class Event {
 		{
 			foreach (static::$events[$event] as $callback)
 			{
-				$responses[] = call_user_func_array($callback, $parameters);
+				$responses[] = call_user_func_array($callback, (array) $parameters);
 			}
 		}
 

+ 17 - 3
laravel/routing/controller.php

@@ -39,6 +39,13 @@ abstract class Controller {
 	 */
 	protected $filters = array();
 
+	/**
+	 * The event name for the Laravel controller factory.
+	 *
+	 * @var string
+	 */
+	const factory = 'laravel.controller.factory';
+
 	/**
 	 * Call an action method on a controller.
 	 *
@@ -127,12 +134,19 @@ abstract class Controller {
 			return IoC::resolve($resolver);
 		}
 
+		$controller = static::format($bundle, $controller);
+
 		// If we couldn't resolve the controller out of the IoC container we'll
 		// format the controller name into its proper class name and load it
 		// by convention out of the bundle's controller directory.
-		$controller = static::format($bundle, $controller);
-
-		$controller = new $controller;
+		if (Event::listeners(static::factory))
+		{
+			$controller = Event::first(static::factory, $controller);
+		}
+		else
+		{
+			$controller = new $controller;
+		}
 
 		// If the controller has specified a layout to be used when rendering
 		// views, we will instantiate the layout instance and set it to the