Skip to content

Commit 42fb1a4

Browse files
committed
Remove Router::defaultRouteClass()
This method doesn't work very will with the scopes, and is the kind of thing that I don't think many people ever even used. Now that you can easily inject instances, I don't think it is as important either. Fix a number of tests that been failing as well.
1 parent ac4f411 commit 42fb1a4

File tree

3 files changed

+14
-113
lines changed

3 files changed

+14
-113
lines changed

src/Routing/Router.php

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -200,28 +200,6 @@ class Router {
200200
*/
201201
protected static $_urlFilters = [];
202202

203-
/**
204-
* Default route class to use
205-
*
206-
* @var string
207-
*/
208-
protected static $_routeClass = 'Cake\Routing\Route\Route';
209-
210-
/**
211-
* Set the default route class to use or return the current one
212-
*
213-
* @param string $routeClass to set as default
214-
* @return mixed void|string
215-
* @throws \Cake\Error\Exception
216-
*/
217-
public static function defaultRouteClass($routeClass = null) {
218-
if ($routeClass === null) {
219-
return static::$_routeClass;
220-
}
221-
222-
static::$_routeClass = static::_validateRouteClass($routeClass);
223-
}
224-
225203
/**
226204
* Validates that the passed route class exists and is a subclass of Cake Route
227205
*
@@ -352,10 +330,6 @@ public static function resourceMap($resourceMap = null) {
352330
*/
353331
public static function connect($route, $defaults = [], $options = []) {
354332
static::$initialized = true;
355-
356-
if (empty($options['routeClass'])) {
357-
$options['routeClass'] = static::$_routeClass;
358-
}
359333
Router::scope('/', function($routes) use ($route, $defaults, $options) {
360334
$routes->connect($route, $defaults, $options);
361335
});

src/Routing/ScopedRouteCollection.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -372,17 +372,21 @@ public function connect($route, array $defaults = [], $options = []) {
372372
* @param array $defaults Default parameters.
373373
* @param array $options Additional options parameters.
374374
* @return \Cake\Routing\Route\Route
375+
* @throws \Cake\Error\Exception when route class or route object is invalid.
375376
*/
376377
protected function _makeRoute($route, $defaults, $options) {
377378
if (is_string($route)) {
378379
$routeClass = 'Cake\Routing\Route\Route';
379380
if (isset($options['routeClass'])) {
380381
$routeClass = App::className($options['routeClass'], 'Routing/Route');
381-
unset($options['routeClass']);
382+
}
383+
if ($routeClass === false) {
384+
throw new Error\Exception(sprintf('Cannot find route class %s', $options['routeClass']));
382385
}
383386
if ($routeClass === 'Cake\Routing\Route\RedirectRoute' && isset($defaults['redirect'])) {
384387
$defaults = $defaults['redirect'];
385388
}
389+
unset($options['routeClass']);
386390

387391
$route = str_replace('//', '/', $this->_path . $route);
388392
if (is_array($defaults)) {
@@ -556,7 +560,7 @@ public function match($url, $context) {
556560
protected function _getNames($url) {
557561
$name = false;
558562
if (isset($url['_name'])) {
559-
$name = $url['_name'];
563+
return [$url['_name']];
560564
}
561565
$plugin = false;
562566
if (isset($url['plugin'])) {

tests/TestCase/Routing/RouterTest.php

Lines changed: 8 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -330,25 +330,6 @@ public function testMapResourcesConnectOptions() {
330330
$this->assertEquals('^(bar)$', $route->options['foo']);
331331
}
332332

333-
/**
334-
* Test that RouterCollection::all() gets the list of all connected routes.
335-
*
336-
* @return void
337-
*/
338-
public function testRouteCollectionRoutes() {
339-
$collection = new RouteCollection();
340-
Router::setRouteCollection($collection);
341-
Router::mapResources('Posts');
342-
343-
$routes = $collection->all();
344-
345-
$this->assertEquals(count($routes), 6);
346-
$this->assertInstanceOf('Cake\Routing\Route\Route', $routes[0]);
347-
$this->assertEquals($collection->get(0), $routes[0]);
348-
$this->assertInstanceOf('Cake\Routing\Route\Route', $routes[5]);
349-
$this->assertEquals($collection->get(5), $routes[5]);
350-
}
351-
352333
/**
353334
* Test mapResources with a plugin and prefix.
354335
*
@@ -2625,10 +2606,15 @@ public function testUrlWithRequestAction() {
26252606
public function testUrlFullUrlReturnFromRoute() {
26262607
$url = 'http://example.com/posts/view/1';
26272608

2628-
$routes = $this->getMock('Cake\Routing\RouteCollection');
2629-
Router::setRouteCollection($routes);
2630-
$routes->expects($this->any())->method('match')
2609+
$route = $this->getMock(
2610+
'Cake\Routing\Route\Route',
2611+
['match'],
2612+
['/:controller/:action/*']
2613+
);
2614+
$route->expects($this->any())
2615+
->method('match')
26312616
->will($this->returnValue($url));
2617+
Router::connect($route);
26322618

26332619
$result = Router::url(array('controller' => 'posts', 'action' => 'view', 1));
26342620
$this->assertEquals($url, $result);
@@ -2731,69 +2717,6 @@ public function testResourceMap() {
27312717
Router::resourceMap($default);
27322718
}
27332719

2734-
/**
2735-
* Test setting the default route class
2736-
*
2737-
* @return void
2738-
*/
2739-
public function testDefaultRouteClass() {
2740-
$routes = $this->getMock('Cake\Routing\RouteCollection');
2741-
$this->getMock('Cake\Routing\Route\Route', [], array('/test'), 'TestDefaultRouteClass');
2742-
2743-
$routes->expects($this->once())
2744-
->method('add')
2745-
->with($this->isInstanceOf('\TestDefaultRouteClass'));
2746-
2747-
Router::setRouteCollection($routes);
2748-
Router::defaultRouteClass('\TestDefaultRouteClass');
2749-
2750-
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
2751-
}
2752-
2753-
/**
2754-
* Test getting the default route class
2755-
*
2756-
* @return void
2757-
*/
2758-
public function testDefaultRouteClassGetter() {
2759-
$routeClass = '\TestDefaultRouteClass';
2760-
Router::defaultRouteClass($routeClass);
2761-
2762-
$this->assertEquals($routeClass, Router::defaultRouteClass());
2763-
$this->assertEquals($routeClass, Router::defaultRouteClass(null));
2764-
}
2765-
2766-
/**
2767-
* Test that route classes must extend Cake\Routing\Route\Route
2768-
*
2769-
* @expectedException \Cake\Error\Exception
2770-
* @return void
2771-
*/
2772-
public function testDefaultRouteException() {
2773-
Router::defaultRouteClass('');
2774-
Router::connect('/:controller', []);
2775-
}
2776-
2777-
/**
2778-
* Test that route classes must extend Cake\Routing\Route\Route
2779-
*
2780-
* @expectedException \Cake\Error\Exception
2781-
* @return void
2782-
*/
2783-
public function testSettingInvalidDefaultRouteException() {
2784-
Router::defaultRouteClass('Object');
2785-
}
2786-
2787-
/**
2788-
* Test that class must exist
2789-
*
2790-
* @expectedException \Cake\Error\Exception
2791-
* @return void
2792-
*/
2793-
public function testSettingNonExistentDefaultRouteException() {
2794-
Router::defaultRouteClass('NonExistentClass');
2795-
}
2796-
27972720
/**
27982721
* Test that the compatibility method for incoming urls works.
27992722
*

0 commit comments

Comments
 (0)