diff --git a/lib/Cake/Routing/Router.php b/lib/Cake/Routing/Router.php index 04679aded..d722cf7da 100644 --- a/lib/Cake/Routing/Router.php +++ b/lib/Cake/Routing/Router.php @@ -233,7 +233,11 @@ class Router { public static function connect($route, $defaults = array(), $options = array()) { foreach (self::$_prefixes as $prefix) { if (isset($defaults[$prefix])) { - $defaults['prefix'] = $prefix; + if ($defaults[$prefix]) { + $defaults['prefix'] = $prefix; + } else { + unset($defaults[$prefix]); + } break; } } diff --git a/lib/Cake/Test/Case/Routing/RouterTest.php b/lib/Cake/Test/Case/Routing/RouterTest.php index 3fcd431c1..851bae486 100644 --- a/lib/Cake/Test/Case/Routing/RouterTest.php +++ b/lib/Cake/Test/Case/Routing/RouterTest.php @@ -1698,6 +1698,27 @@ class RouterTest extends CakeTestCase { $this->assertEquals($expected, $result); } +/** + * Test that setting a prefix to false is ignored, as its generally user error. + * + * @return void + */ + public function testPrefixFalseIgnored() { + Configure::write('Routing.prefixes', array('admin')); + Router::connect('/cache_css/*', array('admin' => false, 'controller' => 'asset_compress', 'action' => 'get')); + + $url = Router::url(array('controller' => 'asset_compress', 'action' => 'get', 'test')); + $expected = '/cache_css/test'; + $this->assertEquals($expected, $url); + + $url = Router::url(array('admin' => false, 'controller' => 'asset_compress', 'action' => 'get', 'test')); + $expected = '/cache_css/test'; + $this->assertEquals($expected, $url); + + $url = Router::url(array('admin' => true, 'controller' => 'asset_compress', 'action' => 'get', 'test')); + $this->assertEquals('/admin/asset_compress/get/test', $url); + } + /** * testRemoveBase method * @@ -2474,5 +2495,4 @@ class RouterTest extends CakeTestCase { Router::parse('/not-a-match'); $this->assertEquals(Router::$routes[0]->response->header(), array()); } - }