Permalink
Browse files

Add Router::defaultRouteClass()

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

Fixes #2435
  • Loading branch information...
1 parent b76f8f8 commit b14072aa6fa2a7627cd9795aedc837bf0612c182 @markstory markstory committed Jan 13, 2012
Showing with 31 additions and 1 deletion.
  1. +18 −1 lib/Cake/Routing/Router.php
  2. +13 −0 lib/Cake/Test/Case/Routing/RouterTest.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) {
@ADmad

ADmad Jan 13, 2012

Member

How about making this function a getter too so that if you pass it null param it returns the current default route class name. That could be useful for someone.

@tigrang

tigrang Jan 13, 2012

Contributor

+1 for that, simple to do. I can add a pull request and if you guys can decide if you want it. I guess it also stops for setting $_routeClass to null. Also with this option now I think we also need to check if the class is a sublcass of CakeRoute and throw an exception as currently its only done if $options['routeClass'] is set.

@tigrang

tigrang Jan 13, 2012

Contributor

Fix with getter option here: tigrang/cakephp@2656e16

@ADmad

ADmad Jan 14, 2012

Member

Can you please make a pull request against the 2.1 branch so that your commit can be easily merged in.

@tigrang

tigrang Jan 14, 2012

Contributor

I thought I did. Sorry, will do now.

+ self::$_routeClass = $routeClass;
+ }
+
+/**
* Sets the Routing prefixes.
*
* @return void
@@ -259,7 +276,7 @@ public static function connect($route, $defaults = array(), $options = array())
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')) {
@@ -2506,4 +2506,17 @@ public function testRouteRedirection() {
$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]);
+ }
+
}

0 comments on commit b14072a

Please sign in to comment.