Anda di halaman 1dari 6

#89

Get More Refcardz! Visit refcardz.com

CONTENTS INCLUDE:
n

n
Introducing The Zend Framework
Introducing The MVC Design Pattern
Framework Prerequisites
Getting Started with
the Zend Framework
n
Installing The Zend Framework
n
Creating Your First Project
n
Sending Variables to the View and more...

By W. Jason Gilmore

INTRODUCING THE ZEND FRAMEWORK FRAMEWORK PREREQUISITES

The Zend Framework (http://framework.zend.com) is an open The Zend Framework uses object-oriented features only
source object-oriented Web framework which significantly available within PHP 5, with the latest release supporting PHP
reduces the barriers typically encountered when creating 5.2.4 and newer. To take advantage of features such as
powerful Web applications. It does so by providing developers custom routing you’ll need to implement Apache’s
with an array of tools which facilitate many of the most mod_rewrite module. Finally, you may need to enable specific
commonplace yet tedious tasks, such as data validation, PHP extensions in order to take advantage of specific Zend
database access and manipulation, sending e-mail, user Framework components. Consult the Zend Framework
account management, search engine optimization, and documentation for a list of extension dependencies.
internationalization.
INSTALLING THE ZEND FRAMEWORK
The Zend Framework developers also place special emphasis
on “the latest Web 2.0 features”, offering simple solutions for
You can download the Zend Framework from the following
AJAX integration, content syndication, and communication
location: http://framework.zend.com/download/latest
with popular APIs such as those offered by Amazon.com,
Google, and Yahoo!. On this page you’ll find several packages, with accompanying
www.dzone.com

descriptions of the package contents. Unless you have special


INTRODUCING THE MVC DESIGN PATTERN requirements I suggest downloading the minimal package.

The Zend Framework can be installed simply by opening the


Like most mainstream Web frameworks, the Zend Framework
download file and moving the library directory to a location
embraces the MVC design pattern, which encourages the
accessible by the PHP installation. You can do this by modifying
separation of an application’s data, business logic, and
the php.ini file’s include_path directive to include the location
presentation. Doing so facilitates the creation of more
of your Zend Framework files. For instance you could place the
maintainable, reusable, and testable code.
library directory within a directory named includes found within
the PHP directory on your server, and then set the include_path
directive like so:

include_path = ".:/php/includes"

If you’re unable to modify the php.ini file, then you can set the
include_path directive within an .htaccess file like this:
Getting Started with the Zend Framework

php_value include_path ".:/php/includes"

Get over 85 DZone Refcardz


FREE from Refcardz.com!

 
Figure 1: The MVC pattern isolates application components

Zend Framework applications typically consist of a series of


models, controllers, and views, each of which are managed
within a separate file. But the end user does not access these
files directly! Instead, all requests are routed through the front
controller. See the later section “The Application Structure” for
more information about these files.

DZone, Inc. | www.dzone.com


2
Getting Started with the Zend Framework

Configuring Zend_Tool Creating a Controller


The Zend Framework includes a component named Zend_Tool Zend_Tool also supports the ability to create controllers from
which greatly reduces the amount of time and effort otherwise the command-line using the following syntax:
required to manage your Zend Framework projects. The Zend
%>zf create controller NAME
Framework is bundled with a command-line interface to this
tool, but in order to use it you’ll need to make the interface
accessible from anywhere on your operating system, done Creating Actions
by adding the script location to your system path. The script Controllers are simply PHP classes which typically consist of
extension is operating system-dependent, so be sure to a series of public methods, known as actions. Each action
refer to the zf.sh script on Unix-based servers, and zf.bat on is responsible for processing the logic associated with a
Windows. corresponding page. For instance, an action named contact
found in the About controller would by default be associated
The script is located within the downloaded package’s bin with the url:
directory. Copy the appropriate operating system-specific file
along with the zf.php file (also found in the bin directory) into a www.example.com/about/contact
directory recognized by your system path. It’s common practice
to copy these files into the same directory as your PHP binary. Zend_Tool supports the ability to create an action using the
Next, create the environment variable following syntax:
ZEND_TOOL_INCLUDE_PATH_PREPEND, assigning it the path
%>zf create action NAME CONTROLLER-NAME
pointing to the location of your Zend Framework
library directory.
Be sure to replace NAME with the name of your action, and
CONTROLLER-NAME with the name of the controller where you’d
CREATING YOUR FIRST PROJECT like this action to be placed.

With Zend_Tool installed, you can create your first Zend Creating a View
Framework-powered project in mere seconds. To create a Each action is accompanied by a view, which contains the
project, open a command prompt and navigate to the location HTML used to render the page associated with the action.
where you’d like the project directory to reside. Then execute For instance, the view associated with the About controller’s
the following command, replacing PROJECT_NAME with the contact action would be named contact.phtml, and would
name of your particular project: reside in the following directory:
%>zf create project PROJECT_NAME
application/views/scripts/about/
In addition to creating the directory structure and files
necessary to power a Zend Framework-driven Website, Zend_Tool does not support the creation of view skeletons,
this command will also create an index controller and likely because it’s probably more efficient to simply create
corresponding view which will represent the home page. them using an IDE in the first place. However if you’ve already
You can confirm that the project was created successfully by used Zend_Tool to create the corresponding action, then the
navigating to the site’s home page from within your browser, default behavior is to create an associated view. See the Zend_
but first you’ll need to set your Web server’s document root Tool documentation for more information.
to the project’s public directory (this directory is found in the
project’s root directory, and is autogenerated by Zend_Tool). Creating a Template
This is because all requests are funneled through the project’s By default any rendered view will comprise the whole of
front controller, which is responsible for processing the request the Web page displayed within the browser. Because you’ll
and returning the response. You don’t have to create the probably want to wrap a template around the views which
front controller, it’s automatically created when you create a contains elements such as a header and footer. Configure
new project using Zend_Tool. Once the document root is set, your application to recognize the template by opening the
restart your Web server and navigate to the site’s home page, application/configs/application.ini file and adding the
and you’ll see the welcome message displayed in Figure 2. following lines:

; Configure the layout template


resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_PATH "/views/layouts"

The application.ini configuration file is introduced in the later


section “The Configuration File”.

Next, create a file named layout.phtml and place it within


application/views/layouts. You’ll need to first create the layouts
directory.

The Application Structure


  Based on the tasks we’ve carried out so far, the project’s
Figure 2: The default home page directory structure will look like this:

DZone, Inc. | www.dzone.com


3
Getting Started with the Zend Framework

application/
configs/ VIEW HELPERS
application.ini
controllers/
ErrorController.php Within your views you’ll often need to repeatedly manipulate
IndexController.php data in a specific way. For instance, if you were creating a
models/
views/
weight loss application, then you’ll regularly want to refer to a
helpers/ user according to gender, such as:
layouts/
He has lost 4.25 lbs this week.
layout.phtml
scripts/
error/ Because the user could be male or female, you’ll need a way
error.phtml to dynamically change the string to use He or She, accordingly.
index/
index.phtml Such decision making will likely occur throughout your
Bootstrap.php application, therefore rather than repeatedly use if or ternary
library/
public/
statements, you can create a view helper and use it like this:
.htaccess
index.php <?= $this->Gender($user); ?> has lost 4.25 lbs. this week.
tests/
This Gender view helper is defined next:
Let’s take a moment to examine those directories and files
class My_View_Helper_Gender extends
which haven’t already been introduced. Zend_View_Helper_Abstract
{
The configs directory contains the application’s configuration public function Gender($user)
{
file, application.ini. This file is introduced in the later section
return $user->Gender == "m" ? "he" : "she";
“The Configuration File”. }
}
The ErrorController.php file is automatically created when
Save this helper to a file named Gender.php and store it within
creating a project using Zend_Tool. It handles any errors of
the application/views/helpers directory.
codes such as 404 and 500 which are generated when using the
application.
THE CONFIGURATION FILE
The views/helpers directory contains the application’s view
helpers. This feature is introduced in the later section “View The Zend Framework makes it easy to centrally manage your
Helpers.” application’s configuration data such as database connection
parameters, Web service API keys, and e-mail addresses.
The Bootstrap.php file is responsible for initializing the Although it’s possible to manage this information from
resources used by your application. data sources such as a database, the most commonplace
solution is via the default application.ini file, located within
The public directory contains files which are directly accessible the application’s configs directory. The file is organized using
by the user, such as the application’s images, javascript files, the common INI format used by many applications, with each
and CSS. You’re free to organize these files within the public configuration variable assignment performed like this:
directory as you see fit, however I prefer to simply place
them within directories named images, javascript, and css, email.support = "support@example.com"

respectively. The public directory also contains an .htaccess Recognizing the need to often adjust configuration data based
file, which is responsible for rewriting all incoming requests on the phase of development (development, testing, staging,
(save for anything stored in the public directory) to the index. and production are commonplace phase monikers), this file is
php file, which is the application’s front controller. broken into four sections, with each representing a phase, like
so:
The tests directory contains any PHPUnit tests you’ve created
to test your application [production]
phpSettings.display_startup_errors = 0
email.support = "support@example.com"
SENDING VARIABLES TO THE VIEW
[staging : production]
phpSettings.display_startup_errors = 1
Because much of the data found in the application views will
[testing : production]
likely be dynamically generated, you’ll need to regularly pass phpSettings.display_startup_errors = 1
variables from actions to views. Known as instance properties,
[development : production]
these variables are assigned within the action like this, where email.support = "admin@example.com"
NAME is the name of your variable: phpSettings.display_startup_errors = 1

$this->view->NAME Setting the Application Phase


To switch an application from one phase to another, open up
Within the view, you’ll be able to access this variable like this: the project’s .htaccess file and set the APPLICATION_ENV
variable to the desired phase. By default APPLICATION_ENV is
$this->NAME
set to development, as shown here:

DZone, Inc. | www.dzone.com


4
Getting Started with the Zend Framework

SetEnv APPLICATION_ENV development protected function _initRouter()


{
$frontController = Zend_Controller_Front::getInstance();
Accessing Configuration Data $router = $frontController->getRouter();
To access your configuration data within a controller, define the
// Product view route
following lines within the action:
$route = new Zend_Controller_Router_Route(
'/about/contact',
$bootstrap = $this->getInvokeArg('bootstrap'); array(
$configArray = $bootstrap->getOptions(); 'controller' => 'help',
$config = new Zend_Config($configArray); 'action' => 'support'
)
);
All of the configuration variables will be made available as $router->addRoute('contactus', $route);
attributes via the $config object. For instance, you would }
access a configuration variable named email.support like this:
You can add as many other custom routes as you pleae to
$config->email->support this method, just be sure to define the route and then assign
the route a unique name using the addRoute() method, as
If you’re managing user-facing data such as corporate e-mail
demonstrated above.
addresses within the configuration file, then all you need to
do is assign the e-mail address to an instance property as Passing Variables to the Action
demonstrated in the section “Sending Variables to the View”: It’s common practice to build pages dynamically based on the
values of parameters passed via the URL. You can perform this
$this->view->email->support = $this->config->email->support;
task right out of the box using the Zend Framework simply by
stringing parameter names and their corresponding values
USING THE init() METHOD together following the controller and action, like this:

/account/confirm/key/7dugpl97812fjkl
Because your actions will often call upon the same code to
carry out certain tasks, such as accessing the configuration file You can then access the key parameter from within the confirm
as demonstrated in the previous example, it makes sense to action like this:
consolidate that code within a single location. You can do this
using a special init() method, typically placed at the top of a $key = $this->_request->getParam('key');

controller class. Within this method you can place for instance
But what if you wanted to construct a URL which flouted this
the code used to retrieve the configuration data:
convention? For instance, you might want to string together
parameters sans their keys in order to create a more compact
public function init()
{ URL which looks like this:
$bootstrap = $this->getInvokeArg('bootstrap');
$configArray = $bootstrap->getOptions();
/tutorials/php/zend_framework/
$this->config = new Zend_Config($configArray);
}
You can perform such tasks easily using custom routes. For
Notice the subtle difference between the snippet used to instance, to retrieve the php and zend framework parameters,
retrieve the configuration variables and the previous snippet passing them to the tutorials controller’s index action, define
shown in the previous section. When creating variables which the following custom route:
will be accessed throughout the controller, you’ll need to make
$route = new Zend_Controller_Router_Route(
them instance properties via $this. '/tutorials/:parent_category/:child_category',
array(
'controller' => 'tutorials',
CUSTOM ROUTING 'action' => 'categories'
)
);
$router->addRoute('confirm-account', $route);
Although the Zend Framework’s default routing behavior is
to deconstruct the URL path, identifying the controller and You can then access the values represented by the :parent_
action by the order of URL segments (for instance /about/ category and :child_category placeholders using the following
contact/ maps to the About controller’s contact method, syntax:
you’ll inevitably want to override this default behavior and
create your own custom routes. To do this you’ll invoke the $parent = $this->_request->getParam('parent_category');
$child = $this->_request->getParam('child_category');
Zend_Controller_Router_Route() class, passing along the
URL pattern, and destination controller and action. These
custom routes are defined within a method typically named
FORMS PROCESSING
_initRouter() (I say typically because this particular name is
optional although usual) found in the Bootstrap.php file. For
instance to override the destination of the /about/contact URL In the previous section you learned how to access URL
path, instead invoking the Help controller’s support method, parameters using the $this->_request->getParam() method.
you would add the following method to your Accessing data passed via a Web form is similarly trivial using
Bootstrap.php file: the $this->_request->getPost() method. For instance, if a

DZone, Inc.
DZone, Inc. || www.dzone.com
www.dzone.com
5
Getting Started with the Zend Framework

form’s text field is assigned the name email, then this value can
be accessed via the form’s action destination in the following TALKING TO THE DATABASE
fashion:

$email = $this->_request->getPost('email'); The Zend_Db component provides developers with an object-


oriented interface which makes it trivially easy to retrieve
Of course, you’ll want to thoroughly validate any user-supplied and manipulate database data. Supporting all of the major
data before carrying out further actions. The Zend_Validate database solutions, among them MySQL, Oracle, and SQLite,
component greatly reduces the time and code required to you can begin taking advantage of Zend_Db with minimal
perform these validations. configuration, and gradually extend its capabilities to fit even
Validating Data with Zend_Validate the most complex databasing requirements.
The Zend_Validate component contains more than two dozen
validation classes capable of vetting a wide variety of data, Connecting to the Database
including e-mail and IP addresses, URLs, credit cards, and To use Zend_Db you’ll need to configure your database
barcodes, in addition to determining whether a value falls connection within the application.ini file using the following
within a certain range, is of a certain length, or whether two variables:
values are identical.
resources.db.adapter = PDO_MYSQL
resources.db.params.dbname = "easyphpwebsites"
Further, it’s possible to chain validators together, allowing you resources.db.params.username = "webuser"
to conveniently consider multiple aspects of a particular value, resources.db.params.password = "secret"
such as whether it’s both of a certain length and consisting of resources.db.params.hostname = "www.easyphpwebsites.com"
resources.db.isDefaultTableAdapter = true
alphanumeric characters. While these validators can be used
anywhere within your application controllers, you’ll most often The purpose of each variable should be apparent save for
seen them used in conjunction with validating user input. resources.db.adapter, which defines the specific supported
Consult the Zend_Validate documentation for a complete list database adapter which you’ll be using, and resources.
of available classes and capabilities. db.isDefaultTableAdapter, which makes it possible to directly
Validating an E-mail Address call the adapter from within your application.
Validating an e-mail address is a notoriously difficult task,
Remember that one of the great features of the application.ini
accomplished using a fairly complex regular expression.
file is your ability to override parameters, so feel free to define
Thanks to Zend_Validate’s EmailAddress validator, carrying out
these parameters within each phase section in order to easily
this task is trivial:
connect to multiple databases.
$email = "jason@example.com";
$validator = new Zend_Validate_Email_Address(); Using Zend_Db_Table as a Concrete Class
if ($validator->isValid($email)) {
echo "Valid e-mail address!"
The easiest way to use the Zend_Db component is by
} else { instantiating the Zend_Db_Table class directly (this feature is
echo "Invalid e-mail address!";
available as of version 1.9). This example will retrieve the name
}
of the country associated with the primary key 233:
It’s possible to take the e-mail validation process one step
further by attempting to verify whether the address actually $country = new Zend_Db_Table('countries');
echo $country->find(233)->current()->title;
exists. See the documentation to learn how both the domain
and MX records can be verified for existence.
Using Zend_Db_Table in this fashion is useful when you’re only
interested in carrying out the most straightforward database
Chaining Validators Together
operations, such as data retrieval, insertion, modification, and
Suppose you wanted to determine whether a username
deletion. For instance, to delete the row associated with the
consists of not only at least five characters, but also of only
primary key 233, you can call the update() method like this:
alphanumeric characters (letters and numbers). You could
use Zend_Validate’s StringLength and Alnum validators
$country = new Zend_Db_Table('country');
separately to examine both attributes, however Zend_Validate
also supports a concept known as validator chaining which $data = array (
'title' => "United States of America"
streamlines the code: );

$username = "45!"; $where = $country->getDefaultAdapter()->quoteInto('id = ?',


$validatorChain = new Zend_Validate(); 233);
$validatorChain->addValidator(new Zend_Validate_Alnum())
->addValidator(new Zend_Validate_StringLength(6); $country->update($data, $where);
if ($validatorChain->isValid($username)) {
echo "Valid username!");
} Creating a Model
With the database connection established, you can next create
It’s possible to take the e-mail validation process one step a model which will serve as an object-oriented interface to
further by attempting to verify whether the address actually a specific table. For instance, to connect to a table named
exists. See the documentation to learn how both the domain country which contains information about the world’s countries,
and MX records can be verified for existence. you can define a class named Default_Model_Country which

DZone, Inc.
DZone, Inc. || www.dzone.com
www.dzone.com
6
Getting Started with the Zend Framework

extends the framework’s Zend_Db_Table_Abstract class in in a particular country, you’ll need to define the relationship
order to be endowed with Zend_Db’s special features: within both models. Within the member name you’ll define the
dependency like this:
class Model_Country extends Zend_Db_Table_Abstract {
protected $_name = 'country'; protected $_referenceMap = array (
} 'Country' => array (
'columns' => array('country_id'),
'refTableClass' => 'Model_Country'
The $_name attribute can be used to override Zend_Db’s
)
presumption that the model and corresponding table name are );
identical. For instance if the table name is actually countries
but you preferred to use singular form for model names, then Within the country model you’ll define the associated
$_name can be used to rectify this discrepancy. relationship like this:

protected $_dependentTables = array('Model_Member');


With the model defined, you’re free to add methods capable
of abstracting the data query and management processes
With these relationships formalized, you’re able to easily
pertinent to the associated table in any way you please.
retrieve the member’s country using the findParentRow()
method. Likewise, you can retrieve an array containing
Creating Table Relations
all members belonging to a specific country using the
Because your table data will likely be interrelated, Zend_Db
findDependentRowset() method.
offers a great way to formally define these relations, and use
convenience methods to query for interrelated data. Suppose Zend_Db has grown into a quite complex and capable
you created a member table which includes a foreign key component, perhaps worthy of its own RefCard at some
named country_id. This key maps to the primary key of a point in the future. What is introduced here is but a taste
table named country. Because you’ll not only want to know of its capabilities. Be sure to consult the Zend Framework
what country a member lives in, but also what members live documentation for a complete overview.

ABOUT THE AUTHOR RECOMMENDED BOOK


W. Jason Gilmore is founder of a W.J. Gilmore, Easy PHP Websites with the Zend Framework
LLC, a publishing and consulting firm based out of shows you how to build websites fast using
Columbus, Ohio. He’s the author of several books, PHP and MySQL, two of the world’s most
including the best-selling “Beginning PHP and popular Web development technologies. What’s
MySQL: From Novice to Professional”, “Easy PHP more, you’ll learn how to supercharge these
Websites with the Zend Framework”, and “Easy technologies by taking advantage of a powerful,
PayPal with PHP”. Jason is cofounder of the free web development solution known as the
CodeMash Conference, has over 100 articles to Zend Framework, which helps developers build
his credit within prominent publications such as PHPBuilder.com, websites with amazing speed and efficiency.
Developer.com, and Linux Magazine.

BUY NOW
books.dzone.com/books/zendframework

#82

Browse our collection of over 85 Free Cheat Sheets


Get More Refcardz! Visit refcardz.com

CONTENTS INCLUDE:

About Cloud Computing
Usage Scenarios Getting Started with
n
Aldo

Cloud#64Computing

Underlying Concepts
Cost
by...

Upcoming Refcardz
youTechnologies ®
Data

t toTier
brough Comply.
borate.
Platform Management and more...

Chan
ge. Colla By Daniel Rubio

tion:
dz. com

also minimizes the need to make design changes to support


CON

tegra ternvasll
ABOUT CLOUD COMPUTING one time events. TEN TS
INC ■
HTML LUD E:

us Ind Anti-PPaat
Basics
Automated growthHTM
ref car

Web applications have always been deployed on servers & scalable


L vs XHT technologies

nuorn

Valid
ation one time events, cloud ML
connected to what is now deemed the ‘cloud’. Having the capability to support

Java GUI Development


Usef
Du
ti

ul M.
computing platforms alsoulfacilitate
4 Open the gradual growth curves

n an
Page Source

o

s
Vis it

However, the demands and technology used on such servers Structure

C
faced by web applications. Tools

Core
By Key ■
Elem

atte
has changed substantially in recent years, especially with Structur
E: al Elem ents
INC LUD gration
NTS
P the entrance of service providers like Amazon, Google and Large scale growth scenarios involvingents
specialized
and mor equipment
rdz !

ous Inte Change

HTML
CO NTE Microsoft. es e... away by
(e.g. load balancers and clusters) are all but abstracted
Continu at Every e chang
m

About ns to isolat
relying on a cloud computing platform’s technology.
Software i-patter
space

Adobe Catalyst
rdz .co


n
Re fca

e Work
Build
riptio
and Ant These companies
Desc have a Privat
are in long deployed trol repos
itory web applicationsge HTM
L BAS

to mana
Patterns Control

that adaptDeve
lop softw
and scale to
n-con
large user
a versio bases,ng and making them In addition, several cloud computing ICSplatforms support data
les to ize mergi
ment
rn
Version e... Patte it all fi minim le
tier technologiesHTM
Manage s and mor e Work knowledgeable in amany
ine to
mainl aspects related tos multip
cloud computing. that Lexceed the precedent set by Relational
space Comm and XHT

ref ca

Build
re

tice Privat lop on that utilize HTML MLReduce,


Prac

Deve a system Database Systems (RDBMS): is usedMap are web service APIs,
Build of work prog as thescalethe foundati By An
Ge t Mo

This Refcard will introduce e within


to you to cloud riente computing, with an
d units
RATION
etc. Some platforms ram support large grapRDBMS deployments.

The src
INTEG softwar emphasis on these providers, so es by
task-o it
youComm can better understand and Java s written in hical on of
all attribute dy Ha
also rece JavaScri user interfac web develop and the rris
Vis it

OUS

Flash Builder 4
chang
ding code Level
as the desc
the ima alt attribute ribes whe
www.dzone.com

a Task
ive data pt. Server-s
ce
NTINU of buil tr what it is a cloud computing es as platform can offer your ut web output e in clien ment.
T CO cess ion con it chang e witho likew ide lang t-sid e ge is describe re the ima
ise use mec hanism. fromAND
e name CLOUD COMPUTING PLATFORMS
the pro ject’s vers applications. and subm sourc
ABOU (CI) is
with uniqu are from web
The eme pages and uages like Nested
unavaila s alte ge file
rd z!

a pro the build softw um was HTM ble. rnate can be


gration ed to Label ies to
build minim UNDERLYING once CONCEPTS L and rging use HTM PHP tags text that found,
ous Inte
activit the bare standard a very loos XHTML Tags
committ to a pr USAGE SCENARIOS ate all
gurat
ion cies to t
ely-defi as thei Ajax
technolo L can is disp
Continu ry change ization, cannot be (and freq
Autom nden ymen layed
tion r visu
Re fca

a solu inef tool depe same


deplo t need but ned al eng gies if
eve (i.e., ) alled the nmen for stan as software languag overlap uen
(i.e., t, use target enviro it has ine. HTM
e-inst
with blem Amazon EC2: Industry
whether standard
dards and virtualization
e with b></ , so <a>< tly are) nest
patterns-patterns ar pro ymen
ory. d deploEAR) in each has bec become very little L a> is

Maven 3
reposit ed via particul tions that e Pay only what you consume
tagge or Amazon’s cloud you cho platform
computing
the curr isome
heavily basedmoron fine. b></ ed insid
anti e imp a></
For each (e.g. WAR
ent stan ose to writ
lain the t
es more e
not lega each othe
and x” solu b> is
be exp text) to “fi duc Web application deployment ge until
nden a few years
t librari agonmen was similar app ortant,
ns are to pro packa t enviro industry standard
that will softwaredardand virtualization
e HTM technology.
Mo re

CI can ticular con used i-patter they tend but can


all depe all targe
s will L or XHT arent. Reg the HTM l, but r. Tags
etimes s. Ant tices,
to most phone services: alizeplans with le that
late fialloted resources, ts with an and XHT simplify all help ML, und ardless
L VS
XHTM <a><
in a par hes som , Centr temp you prov b></
enting your
ces end nmen
pro prac incurred cost whether a single
such resources on
were consumed
enviro orthenot. ML of L
in the rily bad
based t Virtualization
muchallows aare physical pieceothe ofr hardware ideto be erstand HTML
implem
eate
approac ed with the cial, but, ies are nt targe es to
of the actually web cod a solid ing has
necessa pared to into differe
opert chang
efi itting utilized by multiple operating simplerThis allows
function systems. ing.resourcesfoundati job adm been arou
associat to be ben e builds
Ge t

are not n com Cloud computing as it’semot known etoday


e comm
has changed this.
befor commo alitytohas than Fortuna on irably, nd for
They
etc. they
Build (e.g. bandwidth, memory,
n elem CPU) be allocated exclusively totely exp som
lts whe that job
ually,
appear effects. rm a
Privat , contin nt team Every mov
entsinstances. ed to CSS
used
to be, HTM ected.
has exp e time. Whi
ed resu ion The various resourcesPerfo consumed by webperio applications
dically (e.g.
opme pag
individual operating system because
L Brow Early
adverse unintend Integrat
sitory Build r to devel common e (HTML . ser HTM anded le it has
web dev manufacture L had very
Repo
e ous bandwidth, memory, CPU) areInteg tallied
ration on a per-unit CI serve basis or XHT far done
duc
Continu Refcar
rm an from
extensio .) All are limited mor e than
om

pro ML shar its


tern.
ack rs add
(starting from zero) by Perfo all major cloud
feedb computing platforms. As a user of Amazon’s essecloud
EC2 elopers
nti computing es platform, you are result anyb
on layo
he pat tion he term le this s toma
ted
hey occur d based n H c ed
d

DZone, Inc.
ISBN-13: 978-1-934238-84-4
140 Preston Executive Dr. ISBN-10: 1-934238-84-8
Suite 100
50795
Cary, NC 27513

DZone communities deliver over 6 million pages each month to 888.678.0399


919.678.0300
more than 3.3 million software developers, architects and decision
Refcardz Feedback Welcome
$7.95

makers. DZone offers something for everyone, including news,


refcardz@dzone.com
tutorials, cheat sheets, blogs, feature articles, source code and more. 9 781934 238844
Sponsorship Opportunities
“DZone is a developer’s dream,” says PC Magazine.
sales@dzone.com
Copyright © 2010 DZone, Inc. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical, Version 1.0
photocopying, or otherwise, without prior written permission of the publisher.

Anda mungkin juga menyukai