Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fix a few outstanding issues with blocks.

- Blocks left open after rendering files should trigger
  an exception.
- Fix strict errors.
- Correct doc blocks.
  • Loading branch information...
commit f0f3eb9ba9fad3b284f8f7f0bd2f001908a7e186 1 parent bcb8444
@markstory markstory authored
View
19 lib/Cake/Test/Case/View/ViewTest.php
@@ -580,7 +580,7 @@ public function testLoadHelpers() {
*/
public function testHelperCallbackTriggering() {
$View = new View($this->PostsController);
- $View->helpers = array('Html', 'Session');
+ $View->helpers = array();
$View->Helpers = $this->getMock('HelperCollection', array('trigger'), array($View));
$View->Helpers->expects($this->at(0))->method('trigger')
@@ -588,7 +588,8 @@ public function testHelperCallbackTriggering() {
$View->Helpers->expects($this->at(1))->method('trigger')
->with('beforeRenderFile', $this->anything());
$View->Helpers->expects($this->at(2))->method('trigger')
- ->with('afterRenderFile', $this->anything());
+ ->with('afterRenderFile', $this->anything())
+ ->will($this->returnValue(''));
$View->Helpers->expects($this->at(3))->method('trigger')
->with('afterRender', $this->anything());
@@ -597,7 +598,8 @@ public function testHelperCallbackTriggering() {
$View->Helpers->expects($this->at(5))->method('trigger')
->with('beforeRenderFile', $this->anything());
$View->Helpers->expects($this->at(6))->method('trigger')
- ->with('afterRenderFile', $this->anything());
+ ->with('afterRenderFile', $this->anything())
+ ->will($this->returnValue('')) ;
$View->Helpers->expects($this->at(7))->method('trigger')
->with('afterLayout', $this->anything());
@@ -1035,6 +1037,17 @@ public function testBlocks() {
}
/**
+ * Test that an exception gets thrown when you leave a block open at the end
+ * of a view.
+ *
+ * @expectedException CakeException
+ * @return void
+ */
+ public function testExceptionOnOpenBlock() {
+ $this->View->render('open_block');
+ }
+
+/**
* Test nested extended views.
*
* @return void
View
3  lib/Cake/Test/test_app/View/Posts/open_block.ctp
@@ -0,0 +1,3 @@
+<?php
+$this->start('no_close');
+echo 'This block has no close :(';
View
11 lib/Cake/View/Helper.php
@@ -754,7 +754,8 @@ public function afterLayout($layoutFile) {
}
/**
- * Before render file callback. Called before any view fragment is rendered.
+ * Before render file callback.
+ * Called before any view fragment is rendered.
*
* Overridden in subclasses.
*
@@ -765,14 +766,16 @@ public function beforeRenderFile($viewfile) {
}
/**
- * After render file callback. Called before any view fragment is rendered.
+ * After render file callback.
+ * Called after any view fragment is rendered.
*
* Overridden in subclasses.
*
- * @param string $viewFile The file about to be rendered.
+ * @param string $viewFile The file just be rendered.
+ * @param string $content The content that was rendered.
* @return void
*/
- public function afterRenderFile($viewfile) {
+ public function afterRenderFile($viewfile, $content) {
}
/**
View
5 lib/Cake/View/View.php
@@ -43,6 +43,7 @@
* @property SessionHelper $Session
* @property TextHelper $Text
* @property TimeHelper $Time
+ * @property ViewBlock $Blocks
*/
class View extends Object {
@@ -755,6 +756,7 @@ public function loadHelpers() {
* @param string $viewFile Filename of the view
* @param array $data Data to include in rendered view. If empty the current View::$viewVars will be used.
* @return string Rendered output
+ * @throws CakeException when a block is left open.
*/
protected function _render($viewFile, $data = array()) {
if (empty($data)) {
@@ -764,6 +766,9 @@ protected function _render($viewFile, $data = array()) {
$this->Helpers->trigger('beforeRenderFile', array($viewFile));
$content = $this->_evaluate($viewFile, $data);
+ if ($this->Blocks->active()) {
+ throw new CakeException(__d('cake_dev', 'The "%s" block was left open.', $this->Blocks->active()));
+ }
$content = $this->Helpers->trigger(
'afterRenderFile',
array($viewFile, $content),
View
9 lib/Cake/View/ViewBlock.php
@@ -135,4 +135,13 @@ public function get($name) {
public function keys() {
return array_keys($this->_blocks);
}
+
+/**
+ * Get the name of the currently open block.
+ *
+ * @return mixed Either null or the name of the open block.
+ */
+ public function active() {
+ return $this->_active;
+ }
}
Please sign in to comment.
Something went wrong with that request. Please try again.