Zend Framework
Introduction
Features and Common Patterns
Examples from a demo blogging application named Postr are
used throughout this presentation. You can view, download, or
fork the demo web application on GitHub:
http://github.com/bradley-holt/postr
Zend_Tool
Automated scaffolding of project and project components
Used in creating the demo application, Postr
Referenced throughout this presentation
Zend_Tool
Create a Project
mkdir postr
cd postr
zf create project .
Front Controller
All HTTP requests for the application go through
one script.
Apache’s rewrite module (or equivalent) makes this
happen.
See:
Front Controller pattern
public/index.php
public/.htaccess
Zend_Application
Bootstraps the application
Provides reusable resources
Sets up PHP environment
See:
Zend_Application
application/Bootstrap.php
Con guration
Default con guration is in application/configs/application.ini
Allows for con guration sections; for example:
• production
• staging
• testing
• development
Sections can inherit from other sections
See:
application/con gs/application.ini
Name the Project
Default application class name pre x is Application_.
zf change application.class-name-prefix Postr_
Updated Con guration
Added to application/configs/application.ini:
[production]
appnamespace = "Postr_"
See:
application/con gs/application.ini
Model-View-Controller (MVC)
Composite of several design patterns
Isolates domain logic from input and presentation
Model: domain logic
View: presentation layer
Controller: interprets input and passes it to the
Model; provides Model data to the View
See:
Model-view-controller
application/models/
application/views/
application/controllers/
Zend_Layout
Implementation of the Two Step View pattern
Allows for consistent layout across multiple pages
Easier to manage than “includes”
See:
Zend_Layout
Two Step View
Controllers
Connects the Model and the View
Contains one or more actions
URL based routing typically decides what controller
and action to execute:
:controller/:action
Custom routing options available
View Scripts
PHP templates
No domain logic please!
Default suffix of .phtml
One view script per controller action (by default)
Zend_Test
Functional (end-to-end) testing of controllers
Simulates HTTP requests to the application
No web server required
Also provides a DB testing facility
See:
Zend_Test
Functional Test
tests/application/controllers/EntryControllerTest.php
Models
Models are speci c to your domain
No such thing as one-size- ts all models
No Zend_Model
However, some useful patterns have emerged
Create a Model
zf create model Entry
Entry Model
application/
models/
Entry.php
See:
application/models/Entry.php
Zend_Form
Input ltering
Input validation
Form and element rendering
Huge time saver
See:
Zend_Form
Zend_Filter
Zend_Validate
Zend_Form
Create a Form
zf create form Entry
Zend_Form
Entry Form
application/
forms/
Entry.php
See:
application/forms/Entry.php
Zend_Db_Table
Object-oriented database interface
Implements the Table Data Gateway
and Row Data Gateway patterns
See:
Table Data Gateway
Row Data Gateway
Con gure a DB Adapter
zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/db/production.db"
zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/db/staging.db" -s staging
zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/db/testing.db" -s testing
zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/db/development.db" -s development
Load DB Schema
Project-speci c and not built-in to Zend Framework:
mkdir -p data/db
php scripts/load.sqlite.php
See:
scripts/load.sqlite.php
scripts/schema.sqlite.sql
Create DB Tables from
the Database
zf create dbtable.from-database
Entry and Entry Tag
DB Tables
application/
models/
DbTable/
Entry.php
EntryTag.php
See:
application/models/DbTable/Entry.php
application/models/DbTable/EntryTag.php
Data Mapper
Keeps your domain logic isolated from your
database implementation
Domain objects should not directly use data
mappers
See:
Data Mapper
Zend_Paginator
Pagination for database or any arbitrary data
Several adapters available:
• Array
• DbSelect
• DbTableSelect
• Iterator
• Null
• Write your own in order to paginate domain objects
See:
Zend_Paginator
Zend_Paginator
Create a Paginator Adapter
zf create model EntryPaginatorAdapter
Zend_Date
Manipulate dates and times
Useful for date and time calculations
Allows for input from and output to various formats
Used as a domain object in the Postr demo application:
• Entry Updated
• Entry Published
See:
Zend_Date
application/models/Entry.php
Zend_Markup
Renders BBcode or Textile markup into HTML or other formats
Extensible so may see other markup languages in the future
Used in the Postr demo application:
• Entry Content and Entry Summary are stored as Textile
markup
• Entry Content and Entry Summary can optionally be
retrieved as HTML
See:
Zend_Markup
BBCode
Textile
application/models/Entry.php
Zend_Navigation
Create menus, breadcrumbs, links, and sitemaps
Used to create the menu navigation in the Postr demo
application
See:
Zend_Navigation
application/Bootstrap.php
application/layouts/scripts/header.phtml
Controller Plugins
Allows developers to hook into various events during the
controller process:
• routeStartup()
• dispatchLoopStartup()
• preDispatch()
• postDispatch()
• dispatchLoopShutdown()
• routeShutdown()
See:
Controller Plugins
application/plugins/RouteContext.php
1–1 of 1 previous next