Sending content to the layout using Cake 2.x

This post is based on Robert Conner’s code for CakePHP 1.x., and I made some changes to get it to work on CakePHP 2.x and add some explanations on how to use it. The original post is on /anything_for_layout-making-html-from-the-view-available-to-the-layout Maybe many people have faced the problem for sending some content to the layout on CakePHP. By saying content I mean not only a simple string but a whole a piece of HTML code. To solve this, we can create a Helper on CakePHP 2.x, according to the following steps:

1. Create the Helper

On the Views/Helpers folder, you need to create the .php file for the helper. In this case we will call it LayoutHelper.php

class LayoutHelper extends AppHelper {

 var $__blockName = null;

 function blockStart($name) {
 if (empty($name)) trigger_error('LayoutHelper::blockStart - name is a required parameter');
 if (!is_null($this->__blockName))
 trigger_error('LayoutHelper::blockStart - Blocks cannot overlap');
 $this->__blockName = $name; ob_start();
 return null;

 function blockEnd(&$view) {
 $buffer = @ob_get_contents();
 $out = $buffer;
 $view->viewVars[$this->__blockName . '_for_layout'] = $out; $this->__blockName = null;

function output($var) {
 if (isset($var) && $var != null)
 echo $var;

2. Setting up the content

For setting up the content that we want to send to the layout, we use the Helper

$layout = $this->Helpers->load('Layout');

right after this, we specify the content that will be sent to the layout

Custom content

and we close the block


3. Show the content

For showing the content on the layout, we add the following

$layout = $this->Helpers->load('Layout');

As we can see, this is really simple and also very useful when trying to customize the content on the layout according to the view we are loading