PHP: Projet Silex - Présentation, pré-requis et architecture
Beaucoup de nouveaux outils sont sortis ces derniers mois voir années et je n'ai pas vraiment eu le temps de m'y intéresser de plus près donc j'ai pris la décision de mettre à l'écart le développement de Smak et de me former sur Silex.
Si vous ne connaissez pas Silex, je vous invite à aller faire un tour parce que je pense que cela en vaut la peine pour des tout petits projets comme celui que je souhaiterais développer avec vous.
Smak était un tout petit loader de fichiers sans vraiment parler de template car le code utilisé dedans restait entièrement du PHP et de l'HTML donc pas de parsing à la Twig ou autre. Dans ce mini-projet, je vais me former sur Silex et sur Twig... Sans compter les différentes extensions proposées par Silex et celles que je vais développer pour mon besoin spécifique (qui utilisera des composants Symfony).
Ce que je souhaite développer au sein de ce projet est très simple puisqu'il s'agit de mon portfolio. Il n'y franchement aucune difficulté, pas d'authentification, ni de formulaire ou de gestion d'administration... En gros, on tape que du GET, du routing et du templating.
Facile non ? Ouais mais afin que ce soit vraiment propre et parfait, il y a quand même du boulot sur la planche, surtout si on doit apprendre en même temps.
Je vous propose de suivre ce projet pas à pas au travers de plusieurs articles qui seront publiés au fur et à mesure de mon avancement personnel afin de vous transmettre les plus belles techniques que je vais essayer de mettre en place. N'étant pas un expert avec ces outils ou même PHP, n'hésitez surtout pas à me reprendre si vous connaissez une implémentation plus propre/DRY/KISS ou à l'inverse de me poser des questions si quelque chose vous échappe.
Présentation grossière du projet
Aujourd'hui, nous allons commencer par présenter un peu les fonctionnalités basiques de l'application et pourquoi pas proposer quelques idées d'enrichissement. Si vous avez déjà visité le portfolio actuel, vous remarquerez qu'on en fait vite le tour.
Voici donc les différentes pages :
- Une page d'index (la home page) qui contiendra un slideshow comme celle qu'il y a actuellement
- Une page à propos identique à celle qui existe au niveau contenu
- Une page pour présenter les collections (catégories de galeries) avec éventuellement un slideshow comme sur la home mais seulement avec les photos des galeries sous-jacentes
- Une page galerie qui contiendra des photos ainsi qu'une description dont les spécifications sont encore à définir ^^
Actuellement mon portfolio fonctionne de la manière suivante : les photos sont stockées dans des répertoires qui constituent les catégories et les galeries. L'extension Smak_Gallery
s'occupe simplement de parcourir ces répertoires afin de les rendre sur le template approprié.
C'est très pratique puisque il n'est pas nécessaire d'uploader les images via un formulaire ou quoi, un simple dépot FTP dans bon dossier vous fera apparaitre la photo sur la bonne page.
Malheureusement, j'avais dans l'idée de développer Smak_Cache
mais manque de temps donc les pages ne sont pas réellement cachées (j'ai tout de même envoyé les headers qui vont bien) car la génération des galeries se fait à chaque visite : lourd !
Le but de ce petit projet et d'appliquer une certaine rigueur dans le développement d'un projet PHP en essayant d'utiliser un maximum de bonnes pratiques avec si possible les outils adéquates.
Êtes-vous partant ?
Road map du projet
1. Pré-requis et architecture
Dans ce premier billet, nous n'allons pas encore coder mais nous allons configurer tous les outils dont nous avons besoin pour la suite. Il se peut que cette partie du projet s'enrichisse durant l'avancement car c'est pas toujours évident de tout prévoir à l'avance.
Environnement de développement et configuration
Nous avons besoin de l'environnement suivant :
- Serveur HTTP Apache 2.2.x
- PHP 5.3.x
- phpUnit 3.5.x
- Git
Configuration Apache
Une fois votre environnement installé, voici le virtual host pour le projet (changez le chemin en fonction de votre arborescence) :
<VirtualHost *:80>
ServerName local.dev.photo.eexit
DocumentRoot /.../net/eexit/photography/dev/web
<Directory /.../net/eexit/photography/dev/web>
Options Indexes Includes FollowSymLinks -MultiViews
AllowOverride All
Order allow,deny
Allow from all
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</Directory>
</VirtualHost>
Sans oublier de rajouter le server name dans le fichier hosts :
echo "\n127.0.0.1 local.dev.photo.eexit" | sudo tee -a /etc/hosts
Configuration de PHP
D'après la documentation de Silex, on doit désactiver certains paramètres Phar dans la config PHP :
[Phar]
phar.readonly=0
phar.require_hash=0
Architecture
Nous voici donc dans le répertoire photography
(correspondant à mon sous-domaine) dans lequel j'ai créé un répertoire dev
qui comprend l'arborescence suivante :
tree dev -dAL 3
dev
├── cache
├── log
├── src
│ └── views
├── tests
├── vendor
└── web
├── media
│ ├── css
│ ├── img
│ └── js
└── photography
├── canon450d
├── oldish
└── travels
Installation des outils
On se place dans le répertoire dev/vendor
:
mkdir Silex && curl http://silex.sensiolabs.org/get/silex.phar -o Silex/silex.phar
git clone git://github.com/fabpot/Twig.git
git clone git://github.com/Seldaek/monolog.git
Facile n'est-ce pas ?