Browse Source

Add Router::defaultRouteClass()

Apply patch from 'Tigran Gabrielyan'.
Allows you to set the default route class used for all future
routes.

Fixes #2435
mark_story 14 years ago
parent
commit
b14072aa6f
2 changed files with 31 additions and 1 deletions
  1. 18 1
      lib/Cake/Routing/Router.php
  2. 13 0
      lib/Cake/Test/Case/Routing/RouterTest.php

+ 18 - 1
lib/Cake/Routing/Router.php

@@ -153,6 +153,23 @@ class Router {
 	protected static $_initialState = array();
 
 /**
+ * Default route class to use
+ *
+ * @var string
+ */
+    protected static $_routeClass = 'CakeRoute';
+
+/**
+ * Set the default rotue class to use
+ *
+ * @param sting $routeClass to set as default
+ * @return void
+ */
+    public static function defaultRouteClass($routeClass) {
+        self::$_routeClass = $routeClass;
+    }
+
+/**
  * Sets the Routing prefixes.
  *
  * @return void
@@ -259,7 +276,7 @@ class Router {
 		if (empty($options['action'])) {
 			$defaults += array('action' => 'index');
 		}
-		$routeClass = 'CakeRoute';
+		$routeClass = self::$_routeClass;
 		if (isset($options['routeClass'])) {
 			$routeClass = $options['routeClass'];
 			if (!is_subclass_of($routeClass, 'CakeRoute')) {

+ 13 - 0
lib/Cake/Test/Case/Routing/RouterTest.php

@@ -2506,4 +2506,17 @@ class RouterTest extends CakeTestCase {
 		$this->assertEquals(Router::$routes[0]->response->header(), array());
 	}
 
+/**
+ * Test setting the default route class
+ *
+ * @return void
+ */
+	public function testDefaultRouteClass() {
+		$this->getMock('CakeRoute', array(), array('/test'), 'TestDefaultRouteClass');
+		Router::defaultRouteClass('TestDefaultRouteClass');
+
+		$result = Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
+		$this->assertInstanceOf('TestDefaultRouteClass', $result[0]);
+	}
+
 }