diff --git a/core/control/HTTPRequest.php b/core/control/HTTPRequest.php index b5591f22e..18987c0c9 100755 --- a/core/control/HTTPRequest.php +++ b/core/control/HTTPRequest.php @@ -386,14 +386,19 @@ class SS_HTTPRequest implements ArrayAccess { * @return string */ public function shiftAllParams() { - $keys = array_keys($this->allParams); - $values = array_values($this->allParams); - $value = array_shift($values); - + $keys = array_keys($this->allParams); + $values = array_values($this->allParams); + $value = array_shift($values); + + // push additional unparsed URL parts onto the parameter stack + if(array_key_exists($this->unshiftedButParsedParts, $this->dirParts)) { + $values[] = $this->dirParts[$this->unshiftedButParsedParts]; + } + foreach($keys as $position => $key) { $this->allParams[$key] = isset($values[$position]) ? $values[$position] : null; } - + return $value; } diff --git a/tests/control/ContentControllerTest.php b/tests/control/ContentControllerTest.php index 5f45301b6..cdf6774ce 100755 --- a/tests/control/ContentControllerTest.php +++ b/tests/control/ContentControllerTest.php @@ -65,25 +65,43 @@ class ContentControllerTest extends FunctionalTest { $this->assertEquals(0, $controller->ChildrenOf('/third-level/')->Count()); } - + public function testDeepNestedURLs() { + SiteTree::enable_nested_urls(); + + $page = new Page(); + $page->URLSegment = 'base-page'; + $page->write(); + + for($i = 0; $i < 10; $i++) { + $parentID = $page->ID; + + $page = new ContentControllerTest_Page(); + $page->Title = "Page Level $i"; + $page->URLSegment = "level-$i"; + $page->write(); + } + + $this->assertEquals($page->Title, $this->get($page->Link())->getBody()); + + SiteTree::disable_nested_urls(); + } + } -class ContentControllerTest_Page extends Page { - +class ContentControllerTest_Page extends Page { } + +class ContentControllerTest_Page_Controller extends Page_Controller { + public static $allowed_actions = array ( 'second_index' ); - -} -class ContentControllerTest_Page_Controller extends Page_Controller { - public function index() { return $this->Title; } - + public function second_index() { return $this->index(); } - + } \ No newline at end of file