Installation et mise en place du projet - Zend Framework 1.12 partie 1

Tutorial Application Facebook PHP/JS : Installation et mise en place du projet.

Publié le 02/10/2013

Nous allons avoir besoin de télécharger ZF 1.12.1 et de la copier à la racine de notre dossier utilisateur ou ailleurs. Mais dans cette exemple nous allons choisir le racine du dossier utilisateur.

1 - Paramétrage de la CLI Zend

Rendre exécutable le shell Zend :

chmod +x /Users/gerard/ZendFramework-1.12.1/bin/zf.sh 

Nous allons éditer le fichier .bash_profile de l'utilisateur de l’OS.

sudo nano .bash_profile 

Ajouter la ligne suivante :

alias zf="/Users/gerard/zf/bin/zf.sh" 

Puis créer un alias pour MySQL qui nous servira par la suite à accéder à ce dernier par la ligne de commande, en ajoutant la ligne suivante :

export PATH="/Applications/MAMP/Library/bin:$PATH" 

Relancer ensuite votre session utilisateur système.

2 - Création du projet "Next"

Se positionner dans le répertoire "htdocs" de MAMP :

cd /Applications/MAMP/htdocs/ 

Lancer la CLI zend :

zf create project next 

Copier de la librairie Zend dans la le projet :

cp -r /Users/gerard/zf/library/ /Applications/MAMP/htdocs/next/library/ 

3 - Configuration Apache et MySQL

Apache

Créer un hôte virtuel dans Apache via MAMP qui portera le nom de l'application. Définir le chemin : /Applications/MAMP/htdocs/next/public

MySQL

Import de la base via phpMyAdmin.

Important : la base doit être créée avant la génération des modèles lors du paramétrage de Doctrine abordé plus loin dans cet ouvrage.

4 - Conseils pour la mise en production

Gestion des messages d’erreur php :

Dans le fichier .htaccess du dossier "APPLICATION_PATH"/public/, il faut modifier la ligne suivante :

SetEnv APPLICATION_ENV development 

et la remplacer par :

SetEnv APPLICATION_ENV production 

Magic Quotes :

Penser à désactiver le magic_quotes_gpc dans le fichier php.ini de votre serveur, passez l’argument à Off. Note : la classe de filtre que nous allons employer dans les formulaires vont nous affranchir de ce problème, je souligne ce point pour éviter de tourner en rond par la suite.

SVN :

Pour retirer les dossiers .svn du dossier app, exécuter le jeu de commandes suivantes :

find . -name ".svn" -exec rm -rf {} \; 

Root path hosting :

Le chemin relatif à la racine du serveur sera stocké dans le fichier "APPLICATION_PATH"/public/index.php :


// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

defined('PUBLIC_PATH')
    || define('PUBLIC_PATH', realpath(dirname(__FILE__)));

Répertoire d’upload des éléments file de formulaire :

Penser à utiliser le chemin PUBLIC_PATH.

La config du fichier .htaccess du dossier public :

Variables chez OVH :


SetEnv MAGIC_QUOTES 0
SetEnv SESSION_USE_TRANS_SID 0
SetEnv APPLICATION_ENV development

Réécriture d’URL :


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

5 - Détail du fichier application.ini

Le fichier application.ini va se décomposer en configuration dépendant d’une variable d’environnement renvoyant aux sections suivantes : production, staging : production, developpement : production.

Nous allons ici nous intéresser à la section production. Elle se décompose, dans le cas de notre application, en plusieurs parties :

L’affichage des messages d’erreur :


phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

Le chemin d’include de la bibliothèque :

includePaths.library = APPLICATION_PATH "/../library" 

- Le chemin du boostrap :


bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"

- Le chemin des controllers :

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 

- Le prefixage des classes pour l’autoloader :


autoloaderNamespaces[] = "Next_"
autoloaderNamespaces[] = "Doctrine_"

- L’accès à la base de données pour Doctrine :

doctrine.dsn = "mysql://root:root@localhost/next_main_new" 

- La déclaration du chemin des modules pour le frontController :


resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules = ""

- La déclaration du chemin des layouts et définition du layout par défaut :


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

- L’activation du système de cache de requêtes :


resources.cachemanager.default.frontend.name = Core
resources.cachemanager.default.frontend.options.caching = true
resources.cachemanager.default.frontend.options.lifetime = 3600
resources.cachemanager.default.backend.name = File
resources.cachemanager.default.backend.options.cache_dir = APPLICATION_PATH "/../cache"

- Les routes statiques :


resources.router.routes.showreel.route = /showreel
resources.router.routes.showreel.defaults.module = default
resources.router.routes.showreel.defaults.controller = showreel
resources.router.routes.showreel.defaults.action = index

- Les routes dynamiques :


resources.router.routes.sector-display.route = /admin/sector/view/:id
resources.router.routes.sector-display.defaults.module = admin
resources.router.routes.sector-display.defaults.controller = sector
resources.router.routes.sector-display.defaults.action = display

- Les routes dynamiques avec réécriture d’url :


resources.router.routes.portfolio-article.type = "Zend_Controller_Router_Route_Regex"
resources.router.routes.portfolio-article.route = "fiche-portfolio-(.+)"
resources.router.routes.portfolio-article.defaults.controller = "portfolio"
resources.router.routes.portfolio-article.defaults.action = "index"
resources.router.routes.portfolio-article.map.1 = "id_propre"
resources.router.routes.portfolio-article.reverse = "fiche-portfolio-%s"

APPLICATION.INI CheatSheet for your Zend Framework Application

6 - Conclusions

Notre projet est prêt mais il ne peut nous fournir un résultat dans le navigateur. A la fin de la section 2 : Controllers & Views, vous pourrez faire afficher du résultat dans le navigateur mais sans avoir encore accès à la base de données.

Ces points seront abordés dans les articles suivants.