Browse Source

Fix relative path resolution in View.

Relative paths in view file names where handled very poorly before when
subdirectories were involved. This was not very important in 2.x but is
more important for 3.x as we have Cells and relative paths should work
properly there.

Refs #3945
mark_story 11 years ago
parent
commit
31ed8c3eea
2 changed files with 3 additions and 3 deletions
  1. 1 1
      src/View/View.php
  2. 2 2
      tests/TestCase/View/ViewTest.php

+ 1 - 1
src/View/View.php

@@ -851,7 +851,7 @@ class View {
 				}
 				$name = trim($name, DS);
 			} elseif ($name[0] === '.') {
-				$name = substr($name, 3);
+				$name = $this->viewPath . DS . $subDir . $name;
 			} elseif (!$plugin || $this->viewPath !== $this->name) {
 				$name = $this->viewPath . DS . $subDir . $name;
 			}

+ 2 - 2
tests/TestCase/View/ViewTest.php

@@ -492,7 +492,7 @@ class ViewTest extends TestCase {
 		$result = $View->getViewFileName('/Posts/index');
 		$this->assertPathEquals($expected, $result);
 
-		$expected = TEST_APP . 'TestApp' . DS . 'Template' . DS . 'Posts' . DS . 'index.ctp';
+		$expected = TEST_APP . 'TestApp' . DS . 'Template' . DS . 'Pages' . DS . '..' . DS . 'Posts' . DS . 'index.ctp';
 		$result = $View->getViewFileName('../Posts/index');
 		$this->assertPathEquals($expected, $result);
 
@@ -1127,7 +1127,7 @@ class ViewTest extends TestCase {
 		$result = $View->getViewFileName('../Element/test_element');
 		$this->assertRegExp('/Element(\/|\\\)test_element.ctp/', $result);
 
-		$expected = TEST_APP . 'TestApp' . DS . 'Template' . DS . 'Posts' . DS . 'index.ctp';
+		$expected = TEST_APP . 'TestApp' . DS . 'Template' . DS . 'Posts' . DS . '..' . DS . 'Posts' . DS . 'index.ctp';
 		$result = $View->getViewFileName('../Posts/index');
 		$this->assertPathEquals($expected, $result);
 	}