Browse Source

Merge pull request #822 from rchavik/2.3

enable PluginDot for routeClass parameter
José Lorenzo Rodríguez 13 years ago
parent
commit
b227ff486e

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

@@ -304,7 +304,12 @@ class Router {
 		}
 		$routeClass = self::$_routeClass;
 		if (isset($options['routeClass'])) {
-			$routeClass = self::_validateRouteClass($options['routeClass']);
+			if (strpos($options['routeClass'], '.') === false) {
+				$routeClass = $options['routeClass'];
+			} else {
+				list($plugin, $routeClass) = pluginSplit($options['routeClass'], true);
+			}
+			$routeClass = self::_validateRouteClass($routeClass);
 			unset($options['routeClass']);
 		}
 		if ($routeClass == 'RedirectRoute' && isset($defaults['redirect'])) {

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

@@ -2283,6 +2283,26 @@ class RouterTest extends CakeTestCase {
 	}
 
 /**
+ * test using custom route class in PluginDot notation
+ */
+	public function testUsingCustomRouteClassPluginDotSyntax() {
+		App::build(array(
+			'Plugin' => array(
+				CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS
+			)
+		));
+		CakePlugin::load('TestPlugin');
+		App::uses('TestRoute', 'TestPlugin.Routing/Route');
+		$routes = Router::connect(
+			'/:slug',
+			array('controller' => 'posts', 'action' => 'view'),
+			array('routeClass' => 'TestPlugin.TestRoute', 'slug' => '[a-z_-]+')
+		);
+		$this->assertInstanceOf('TestRoute', $routes[0]);
+		CakePlugin::unload('TestPlugin');
+	}
+
+/**
  * test that route classes must extend CakeRoute
  *
  * @expectedException RouterException

+ 7 - 0
lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Routing/Route/TestRoute.php

@@ -0,0 +1,7 @@
+<?php
+
+App::uses('CakeRoute', 'Routing/Route');
+
+class TestRoute extends CakeRoute {
+
+}