Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Pages controller should render 404 on missing view file

  • Loading branch information...
commit 1ce9fc537f921e87212b7e7daa5741e8e0d9771b 1 parent d992d3a
@majna majna authored
View
12 app/Controller/PagesController.php
@@ -50,6 +50,8 @@ class PagesController extends AppController {
*
* @param mixed What page to display
* @return void
+ * @throws NotFoundException When the view file could not be found
+ * or MissingViewException in debug mode.
*/
public function display() {
$path = func_get_args();
@@ -70,6 +72,14 @@ public function display() {
$title_for_layout = Inflector::humanize($path[$count - 1]);
}
$this->set(compact('page', 'subpage', 'title_for_layout'));
- $this->render(implode('/', $path));
+
+ try {
+ $this->render(implode('/', $path));
+ } catch (MissingViewException $e) {
+ if (Configure::read('debug')) {
+ throw $e;
+ }
+ throw new NotFoundException();
+ }
}
}
View
12 lib/Cake/Console/Templates/skel/Controller/PagesController.php
@@ -42,6 +42,8 @@ class PagesController extends AppController {
*
* @param mixed What page to display
* @return void
+ * @throws NotFoundException When the view file could not be found
+ * or MissingViewException in debug mode.
*/
public function display() {
$path = func_get_args();
@@ -62,6 +64,14 @@ public function display() {
$title_for_layout = Inflector::humanize($path[$count - 1]);
}
$this->set(compact('page', 'subpage', 'title_for_layout'));
- $this->render(implode('/', $path));
+
+ try {
+ $this->render(implode('/', $path));
+ } catch (MissingViewException $e) {
+ if (Configure::read('debug')) {
+ throw $e;
+ }
+ throw new NotFoundException();
+ }
}
}
View
26 lib/Cake/Test/Case/Controller/PagesControllerTest.php
@@ -51,4 +51,30 @@ public function testDisplay() {
$this->assertEquals('TestTheme', $Pages->viewVars['page']);
$this->assertEquals('Posts', $Pages->viewVars['subpage']);
}
+
+/**
+ * Test that missing view renders 404 page in production
+ *
+ * @expectedException NotFoundException
+ * @expectedExceptionCode 404
+ * @return void
+ */
+ public function testMissingView() {
+ Configure::write('debug', 0);
+ $Pages = new PagesController(new CakeRequest(null, false), new CakeResponse());
+ $Pages->display('non_existing_page');
+ }
+
+/**
+ * Test that missing view in debug mode renders missing_view error page
+ *
+ * @expectedException MissingViewException
+ * @expectedExceptionCode 500
+ * @return void
+ */
+ public function testMissingViewInDebug() {
+ Configure::write('debug', 1);
+ $Pages = new PagesController(new CakeRequest(null, false), new CakeResponse());
+ $Pages->display('non_existing_page');
+ }
}
View
12 lib/Cake/Test/test_app/Controller/PagesController.php
@@ -51,6 +51,8 @@ class PagesController extends AppController {
*
* @param mixed What page to display
* @return void
+ * @throws NotFoundException When the view file could not be found
+ * or MissingViewException in debug mode.
*/
public function display() {
$path = func_get_args();
@@ -75,7 +77,15 @@ public function display() {
'subpage' => $subpage,
'title_for_layout' => $titleForLayout
));
- $this->render(implode('/', $path));
+
+ try {
+ $this->render(implode('/', $path));
+ } catch (MissingViewException $e) {
+ if (Configure::read('debug')) {
+ throw $e;
+ }
+ throw new NotFoundException();
+ }
}
}
Please sign in to comment.
Something went wrong with that request. Please try again.