Skip to content

Zend Framework – Creating a Layout

July 16, 2012

There are two design patterns that Zend Framework uses to implement layouts: » Two Step View and » Composite View. Two Step View is usually associated with the » Transform View pattern; the basic idea is that your application view creates a representation that is then injected into the master view for final transformation. The Composite View pattern deals with a view made of one or more atomic, application views.
In Zend Framework, Zend_Layout combines the ideas behind these patterns. Instead of each action view script needing to include site-wide artifacts, they can simply focus on their own responsibilities.
Occasionally, however, you may need application-specific information in your site-wide view script. Fortunately, Zend Framework provides a variety of view placeholders to allow you to provide such information from your action view scripts.
To get started using Zend_Layout, first we need to inform our bootstrap to use the Layout resource. This can be done using the zf enable layout command:
1. % zf enable layout
2. Layouts have been enabled, and a default layout created at
3. application/layouts/scripts/layout.phtml
4. A layout entry has been added to the application config file.
As noted by the command, application/configs/application.ini is updated, and now contains the following within the production section:
1. ; application/configs/application.ini
3. ; Add to [production] section:
4. resources.layout.layoutPath = APPLICATION_PATH “/layouts/scripts”
The final INI file should look as follows:
1. ; application/configs/application.ini
3. [production]
4. ; PHP settings we want to initialize
5. phpSettings.display_startup_errors = 0
6. phpSettings.display_errors = 0
7. includePaths.library = APPLICATION_PATH “/../library”
8. bootstrap.path = APPLICATION_PATH “/Bootstrap.php”
9. bootstrap.class = “Bootstrap”
10. appnamespace = “Application”
11. resources.frontController.controllerDirectory = APPLICATION_PATH “/controllers”
12. resources.frontController.params.displayExceptions = 0
13. resources.layout.layoutPath = APPLICATION_PATH “/layouts/scripts”
15. [staging : production]
17. [testing : production]
18. phpSettings.display_startup_errors = 1
19. phpSettings.display_errors = 1
21. [development : production]
22. phpSettings.display_startup_errors = 1
23. phpSettings.display_errors = 1
This directive tells your application to look for layout view scripts in application/layouts/scripts. If you examine your directory tree, you’ll see that this directory has been created for you now, with the file layout.phtml.
We also want to ensure we have an XHTML DocType declaration for our application. To enable this, we need to add a resource to our bootstrap.
The simplest way to add a bootstrap resource is to simply create a protected method beginning with the phrase _init. In this case, we want to initialize the doctype, so we’ll create an _initDoctype() method within our bootstrap class:
1. // application/Bootstrap.php
3. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
4. {
5. protected function _initDoctype()
6. {
7. }
8. }
Within that method, we need to hint to the view to use the appropriate doctype. But where will the view object come from? The easy solution is to initialize the View resource; once we have, we can pull the view object from the bootstrap and use it.
To initialize the view resource, add the following line to your application/configs/application.ini file, in the section marked production:
1. ; application/configs/application.ini
3. ; Add to [production] section:
4. resources.view[] =
This tells us to initialize the view with no options (the ‘[]’ indicates that the “view” key is an array, and we pass nothing to it).
Now that we have a view, let’s flesh out our _initDoctype() method. In it, we will first ensure the View resource has run, fetch the view object, and then configure it:
1. // application/Bootstrap.php
3. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
4. {
5. protected function _initDoctype()
6. {
7. $this->bootstrap(‘view’);
8. $view = $this->getResource(‘view’);
9. $view->doctype(‘XHTML1_STRICT’);
10. }
11. }
Now that we’ve initialized Zend_Layout and set the Doctype, let’s create our site-wide layout:
2. doctype() ?>
6. Zend Framework Quickstart Application
7. headLink()->appendStylesheet(‘/css/global.css’) ?>

22. layout()->content ?>
We grab our application content using the layout() view helper, and accessing the “content” key. You may render to other response segments if you wish to, but in most cases, this is all that’s necessary.
Note also the use of the headLink() placeholder. This is an easy way to generate the HTML for elements, as well as to keep track of them throughout your application. If you need to add additional CSS sheets to support a single action, you can do so, and be assured it will be present in the final rendered page.
Note: Checkpoint
Now go to “http://localhost” and check out the source. You should see your XHTML header, head, title, and body sections.


From → Uncategorized

Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: