Skip to content

Commit acbb2be

Browse files
committed
adding setExtensions() to allow adding more extensions as parseExtensions would override existing valid extensions
1 parent ab1f336 commit acbb2be

File tree

2 files changed

+56
-6
lines changed

2 files changed

+56
-6
lines changed

lib/Cake/Routing/Router.php

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,20 +1102,39 @@ public static function stripPlugin($base, $plugin = null) {
11021102
public static function parseExtensions() {
11031103
self::$_parseExtensions = true;
11041104
if (func_num_args() > 0) {
1105-
self::$_validExtensions = func_get_args();
1105+
self::setExtensions(func_get_args(), false);
11061106
}
11071107
}
11081108

11091109
/**
1110-
* Get the list of extensions that can be parsed by Router. To add more
1111-
* extensions use Router::parseExtensions()
1110+
* Get the list of extensions that can be parsed by Router.
1111+
* To initially set extensions use `Router::parseExtensions()`
1112+
* To add more see `setExtensions()`
11121113
*
11131114
* @return array Array of extensions Router is configured to parse.
11141115
*/
11151116
public static function extensions() {
11161117
return self::$_validExtensions;
11171118
}
11181119

1120+
/**
1121+
* Set/add valid extensions.
1122+
* To have the extensions parsed you still need to call `Router::parseExtensions()`
1123+
*
1124+
* @param array $extensions List of extensions to be added as valid extension
1125+
* @param boolean $merge Default true will merge extensions. Set to false to override current extensions
1126+
* @return array
1127+
*/
1128+
public static function setExtensions($extensions, $merge = true) {
1129+
if (!is_array($extensions)) {
1130+
return self::$_validExtensions;
1131+
}
1132+
if (!$merge) {
1133+
return self::$_validExtensions = $extensions;
1134+
}
1135+
return self::$_validExtensions = array_merge(self::$_validExtensions, $extensions);
1136+
}
1137+
11191138
}
11201139

11211140
//Save the initial state

lib/Cake/Test/Case/Routing/RouterTest.php

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1235,15 +1235,46 @@ public function testPrefixRoutingAndPlugins() {
12351235
}
12361236

12371237
/**
1238-
* testExtensionParsingSetting method
1238+
* testParseExtensions method
12391239
*
12401240
* @return void
12411241
*/
1242-
public function testExtensionParsingSetting() {
1242+
public function testParseExtensions() {
12431243
$this->assertEquals(array(), Router::extensions());
12441244

12451245
Router::parseExtensions('rss');
1246-
$this->assertEquals(Router::extensions(), array('rss'));
1246+
$this->assertEquals(array('rss'), Router::extensions());
1247+
}
1248+
1249+
/**
1250+
* testSetExtensions method
1251+
*
1252+
* @return void
1253+
*/
1254+
public function testSetExtensions() {
1255+
Router::setExtensions(array('rss'));
1256+
$this->assertEquals(array('rss'), Router::extensions());
1257+
1258+
require CAKE . 'Config' . DS . 'routes.php';
1259+
$result = Router::parse('/posts.rss');
1260+
$this->assertFalse(isset($result['ext']));
1261+
1262+
Router::parseExtensions();
1263+
$result = Router::parse('/posts.rss');
1264+
$this->assertEquals('rss', $result['ext']);
1265+
1266+
$result = Router::parse('/posts.xml');
1267+
$this->assertFalse(isset($result['ext']));
1268+
1269+
Router::setExtensions(array('xml'));
1270+
$result = Router::extensions();
1271+
$this->assertEquals(array('rss', 'xml'), $result);
1272+
1273+
$result = Router::parse('/posts.xml');
1274+
$this->assertEquals('xml', $result['ext']);
1275+
1276+
$result = Router::setExtensions(array('pdf'), false);
1277+
$this->assertEquals(array('pdf'), $result);
12471278
}
12481279

12491280
/**

0 commit comments

Comments
 (0)