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.