Zend Framework sous Mamp

Zend FrameworkAprès avoir passé beaucoup de temps en PHP orienté objet et choisi Codeigniter comme mon premier framework PHP, j’ai décidé de me mettre au Framework Zend qui est sans doute moins léger mais a une vocation plus universelle et est très bien documenté.

Téléchargement de (ZF) et installation locale sous MAC OSX MAMP

J’utilise MAMP sur Mac OSX. J’ai modifié le document root de MAMP (/Applications/MAMP/htdocs par défaut) en :

DocumentRoot “/Users/my_name/Sites”

dans le fichier /Applications/MAMP/conf/apache/httpd.conf

Ainsi, tous mes projets PHP se trouvent dans /Users/my_name/Sites/. C’est le répertoire où je vais installer ZF.

Tout d’abord, téléchargez ZF à partir de http://framework.zend.com/download/latest ou suivez le lien “Download Now” à partir de la page d’accueil Zend. J’ai choisi le Zend Framework 1.11.11 Full. Décompressez le fichier téléchargé dans votre serveur local : /Users/my_name/Sites/ZF/ dans mon cas.

Vous devez modifier votre fichier php.ini pour déclarer le chemin vers la library Zend, qui sera nécessaire pour faire fonctionner l’application que vous créerez. Ouvrez le fichier php.ini (/Applications/MAMP/conf/PHPX.X/php.ini ou parcourez le répertoire /Applications/MAMP/ pour le trouver (PHPX.X symbolise la version de PHP qu’utilise votre MAMP)) à l’aide de TextEdit.app et modifiez la valeur de l’include_path :

;include_path = “.:/Applications/MAMP/bin/php5.3/lib/php” Cette ligne a été commentée (par l’utilisation de “;” en début de ligne) et remplacée par la ligne suivante :
include_path = “.:/Applications/MAMP/bin/php5.3/lib/php:/Users/olivier/Sites/ZF/library”

N’oubliez pas de redémarrer MAMP après modification de votre include_path.

Créer un projet ZF via le Terminal

Ouvrez une fenêtre Terminal (/Applications/Utilitaires/Terminal). Utilisez ensuite la commande suivante pour vous placer dans le Document Root de MAMP :

cd /Users/my_name/Sites

Puis tapez la commande suivante :

/Users/my_name/Sites/ZF/bin/zf.sh create project my_zend

Le script shell ZF sera exécuté et générera le répertoire /Users/my_name/Sites/my_zend/ avec l’arborescence suivante :

Zend project directory tree

Le répertoire application contient des fichiers structurés en MVC. Si vous avez déjjà approché un framework tel que Codeigniter, vous savez ce que cela signifie :

  • Models : contiendront les fichiers de requêtes à la base de données
  • Views : contiendront les fichiers d’Html et Css
  • Controllers : recevront les requêtes des clients, les traiteront, feront des appels aux modèles et enverront les données traitées aux vues.

Le seul répertoire qui doit être accessible aux internautes est le répertoire public.

Utiliser les VirtualHosts sous MAMP

L’usage des hôtes virtuels peut s’avérer très utile. En effet, dans la configuration de MAMP par défaut, vous appelez un de vos projets via une url du type :

http://localhost:8888/my_zend (8888 étant le port http par défaut dans MAMP).

Il est possible de raccourcir cette url et d’utiliser http://my_zend:8888. Personnellement, j’utilise un suffixe : http://my_zend.local:8888 comme hôte virtuel pour ne pas mélanger les domaines du web avec les domaines locaux.

Pour y parvenir, vous devrez modifier 2 fichiers : /private/etc/hosts et /Applications/MAMP/conf/apache/httpd.conf. Ces fichiers sont importants, je vous conseille donc d’en effectuer une sauvegarde via le Terminal en utilisant la commande suivante :

cp /private/etc/hosts /private/etc/hosts.bak

et

cp /Applications/MAMP/conf/apache/httpd.conf /Applications/MAMP/conf/apache/httpd.conf.bak

Dans le terminal, tapez :

sudo nano /private/etc/hosts

Vous devrez ensuite taper le mot de passe du Super Utilisateur Mac et pourrez modifier les hôtes. Utilisez les flèches du clavier pour atteindre la dernière ligne du fichier et tapez :

127.0.0.1 my_zend.local

Puis pressez [CTRL + o] pour enregistrer la modification.

Puis ouvrez le fichier /Applications/MAMP/conf/apache/httpd.conf à l’aide de TextEdit.app et ajoutez les lignes suivantes en fin de fichier :

NameVirtualHost my_zend.local
<VirtualHost my_zend.local>
DocumentRoot "/Users/my_name/Sites/my_zend/public"
ServerName my_zend.local
</VirtualHost>

Vous venez de créer un hôte virtuel. Redémarrez MAMP pour prendre ces modifications en compte et tapez http://my_zend.local:8888 dans votre navigateur favori :

Zend Framework installation complete

Jetez un oeil au code source de cette page Html : les balises <html>, <head> et <body> sont absentes. Nous allons activer le layout dans ZF pour pouvoir définir ces balises pour toutes nos pages.

Activer layout dans ZF

Ouvrez une fenêtre Terminal et tapez le chemin de votre projet ZF :

cd /Users/my_name/Sites/my_zend/

Puis tapez la commande suivante pour activer le layout :

/Users/my_name/Sites/ZF/bin/zf.sh enable layout

Remarquez la structure du répertoire /application/layout qu’a généré le script shell ZF :

répertoire layout

Le fichier /application/configs/application.ini a aussi été modifié pour pointer le répertoire de layout

Pour avoir une déclaration XHTML Doctype correcte, nous devez initialiser l’objet view car déclarer le doctype appellera une vue. Modifiez le fichier /application/configs/application.ini et ajoutez la ligne suivante en bas de la section [production] :

resources.view[] = ""

Puis déclarez le doctype dans /application/Bootstrap.php :

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initDoctype()
{
$this->bootstrap('view');
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
}
}

This being done, you can fill the file /application/layouts/scripts/layout.phtml with the following :

<!-- application/layouts/scripts/layout.phtml -->
<?php echo $this->doctype() ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Zend Framework Quickstart Application</title>
<?php echo $this->headLink()->appendStylesheet('/css/global.css') ?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
</head>
<body>
<div id="header" style="background-color: #EEEEEE; height: 30px;">
<div id="header-logo" style="float: left">
<b>ZF Quickstart Application</b>
</div>
<div id="header-navigation" style="float: right">
<a href="<?php echo $this->url(
array('controller'=>'index'),
'default',
true) ?>">Index</a>
</div>
</div>
<?php echo $this->layout()->content ?>
</body>
</html>

Le code source des pages HTML générées contient désormais toutes les balises nécessaires.

Copier le répertoire Zend library

Les librairies ZF se trouvent dans le répertoire téléchargé /ZF/library/Zend/. Copiez le répertoire Zend et collez-le dans votre projet : /Users/my_name/Sites/library/ de sorte qu’il contienne le répertoire zend.

Webliography

Codeigniter Framework

Zend Framework

Zend Framework download

Zend Framework in action (Livre – English)

Zend Framework – Bien débuter en PHP (Livre en français)

Survive the deep end – Zend Book en ligne

Tutoriel Zend par Rob Allen (tuto 3 étoiles)

Zend Framework on MAMP

Zend FrameworkAfter spending much time in OOP PHP (Object Oriented PHP) and choosing Codeigniter as my first PHP framework, I decided to start working with Zend Framwork which is said to be less lightweight but seems to be a well-documented and universal reference.

Zend download (ZF) and local installation on MAMP MAc OSX 10.6.8

I’m using MAMP on Mac OSX 10.6.8. I’ve changed MAMP’s document root (in /Applications/MAMP/htdocs by default) to :

DocumentRoot "/Users/my_name/Sites"

in /Applications/MAMP/conf/apache/httpd.conf

So all my PHP projects are stored in /Users/my_name/Sites/. That’s the directory in which I’ll set up ZF.

First download ZF from http://framework.zend.com/download/latest or follow the “Download Now” link from the homepage. I chose the Zend Framework 1.11.11 Full package for download. Unzip it and copy the uncompressed ZF directory to your local web server : /Users/my_name/Sites/ZF/ in my case.

You’ll have to change your php.ini file to declare the path to ZF’s library, which will be required by the applications you’ll create. So open your php.ini file (/Applications/MAMP/conf/PHPX.X/php.ini or browse the /Applications/MAMP/ directory to find it (PHPX.X stands for your current PHP version)) and change your include_path :

;include_path = “.:/Applications/MAMP/bin/php5.3/lib/php” This line has been commented (use of “;” in front of the line) and replaced by the following:
include_path = “.:/Applications/MAMP/bin/php5.3/lib/php:/Users/olivier/Sites/ZF/library”

Don’t forget to restart MAMP once your include_path has been modified ;)

Create a ZF project : the Terminal magical way

Open a Terminal window found in Applications/Utilitaires/Terminal. Then use the following command to place yourself in MAMP’s Document Root :

cd /Users/my_name/Sites

Then type the following command :

/Users/my_name/Sites/ZF/bin/zf.sh create project my_zend

The ZF shell script will be executed and will generate the directory /Users/my_name/Sites/my_zend/ with the following directory tree :

Zend project directory tree

The application directory contains files structured in the MVC pattern. If you’re not new to frameworks like Codeigniter, you know what it means :

  • Models : will contain files with queries to the database
  • Views : will contain files with Html, Css
  • Controllers : will receive the client’s request, treat it, make calls to models and output data in views

The only directory that should be reachable from an internet client is the public directory. Therefore, we will create a Virtual Host.

Using VirtualHosts in MAMP

The use of virtual hosts can be very useful. Indeed, in the default configuration, reaching our new project can be done through the use of the following url :

http://localhost:8888/my_zend (8888 being the default http port in MAMP)

It is possible to reach the site through the url http://my_zend:8888. I personnally use http://my_zend.local:8888 as a virtualhost in order not to mix local websites with internet websites.

In order to achieve this, you’ll have to modify 2 files ; /private/etc/hosts and /Applications/MAMP/conf/apache/httpd.conf. Those files are important files for which you should save a copy thanks to the following command in Terminal :

cp /private/etc/hosts /private/etc/hosts.bak

and

cp /Applications/MAMP/conf/apache/httpd.conf /Applications/MAMP/conf/apache/httpd.conf.bak

In Terminal, type

sudo nano /private/etc/hosts

You’ll be prompted to type your Mac’s Super User password. and will be able to modify hosts. Use the keyboard arrows to get to the bottom line of the file and type

127.0.0.1 my_zend.local

Then press [CTRL + o] to save the changes.

Open the file /Applications/MAMP/conf/apache/httpd.conf with TextEdit.app and add the following lines at the bottom of the file :

NameVirtualHost my_zend.local
<VirtualHost my_zend.local>
DocumentRoot "/Users/my_name/Sites/my_zend/public"
ServerName my_zend.local
</VirtualHost>

You’ve just created a new virtual host. Simply restart MAMP servers and type http://my_zend.local:8888 in your favourite browser :

Zend Framework installation complete

Have a look at the source code : the <html>, <head> and <body> tags are missing. We’ll activate layout in ZF in order to be able to add the missing tags to all our pages.

Enable layout in ZF

Just open a terminal window and type the path to your ZF project :

cd /Users/my_name/Sites/my_zend/

Then type the following command to enable layout :

/Users/my_name/Sites/ZF/bin/zf.sh enable layout

Notice the /application/layout/ directory structure :

layout directory

The file /application/configs/application.ini has also been changed to point the layout directory.

In order to have a correct XHTML Doctype declaration, we have to initialize the view object because declaring a doctype will call a view. We’ll achieve this in modifying the file /application/configs/application.ini and add the following line at the bottom of the [production] section :

resources.view[] = ""

Then declare the doctype in /application/Bootstrap.php :

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initDoctype()
{
$this->bootstrap('view');
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
}
}

This being done, you can fill the file /application/layouts/scripts/layout.phtml with the following :

<!-- application/layouts/scripts/layout.phtml -->
<?php echo $this->doctype() ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Zend Framework Quickstart Application</title>
<?php echo $this->headLink()->appendStylesheet('/css/global.css') ?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
</head>
<body>
<div id="header" style="background-color: #EEEEEE; height: 30px;">
<div id="header-logo" style="float: left">
<b>ZF Quickstart Application</b>
</div>
<div id="header-navigation" style="float: right">
<a href="<?php echo $this->url(
array('controller'=>'index'),
'default',
true) ?>">Index</a>
</div>
</div>
<?php echo $this->layout()->content ?>
</body>
</html>

The source code of the generated Html pages contains all the necessary tags.

Copy Zend library folder

ZF core libraries are to be found in the downloaded /ZF/library/Zend/. Simply copy the Zend directory and copy it in your project : /Users/my_name/Sites/library/ so that it contains the zend directory.

Webliography

Codeigniter Framework

Zend Framework Homepage

Zend Framework download

Zend Framework in action (Book)

Survive The Deep End (Zend book online)

Zend Tutorial by Rob Allen (3-star tutorial)