grimboite/old/draft-php-symfony.md

3.9 KiB

Symfony

Cela fait un bout de temps que je voulais essayer le framework Symfony. PHP a été l'un des premiers langages sur lesquels je me suis penché, après une courte phase de Visual Basic. C'était facile et pratique, on pouvait construire un site Web en trois coups de cuillère à pot, de nombreux modules étaient disponibles (news, forums, ...), et la facilité à trouver un hébergeur supportant PHP+MySQL en faisant un langage de prédilection.

Mon expérience avec PHP se limite cependant à une construction "bête et méchante": appels à la DB directement dans la construction de l'affichage, variables de session présentes partout, construction de requêtes directement sur base des paramètres de l'URL, ... De bonnes raisons pour expérimenter un framework dont on entend très souvent parler.

L'installation est très facile: un petit sudo yum install php pour installer PHP sur le système, puis téléchargement de Symfony depuis le site officiel, et décompression de l'archive dans un répertoire. Il n'est même pas nécessaire d'installer Apache, puisqu'un serveur local est dispo (oui, cela peut sembler marrant, mais j'ai expliqué ci-dessus d'où je viens avec PHP...).

On vérifie ensuite que tout est fonctionnel en se rendant à la racine du répertoire décompressé, et en tapant php app/check.php avec ses petits doigts boudinés. Parmi les avertissements, je dois installer PDO pour utiliser Doctrine, configurer la timezone dans le fichier /etc/php.ini et installer les extensions mbstring, intl et un accélérateur PHP. Et puisque c'est toujours aussi simple:

sudo yum install php-pdo php-mbstring php-intl php-apc
    
    Comme spécifié dans le [quick tour](http://symfony.com/pdf/Symfony_quick_tour_2.4.pdf?v=4), on lance ensuite le serveur local grâce à la commande `php app/console server:run`. L'appli est alors disponible à l'URL http://localhost:8000. Cette application comprend un premier bundle de démo, situé dans [...]

Structure des fichiers

Après avoir décompressé l'archive, on se retrouve devant une masse de fichiers dont on ne comprend pas toujours le sens. Notez que ce n'est finalement pas si compliqué que cela:

  • La racine qui contient les fichiers readme, pré-requis et scripts de post-install/update.
  • Le répertoire app pour la configuration de l'application actuelle
  • Le répertoire bin pour les binaires (Doctrine est tout seul dans son coin pour le moment)
  • Le répertoire src pour les différents bundles (qui correspondent en gros à une app Django)
  • Le répertoire vendor pour les applications tierces (Twig, Sensio, ...)
  • Le répertoire web pour les assets (css, images, ...) et le bootstrap de l'appli en elle-même.

Création du fichier de config

Pour le fichier de configuration, rien de plus simple: on lance le serveur local et on se rend à l'adresse http://localhost:8000/config.php; on suit ensuite les quelques étapes. Cela génère un fichier .yml à l'emplacement app/config/parameters.yml.

Les controleurs

Les vues

Les vues se basent sur Twig, qui permet entre autre un héritage de templates:

{% extends "TwigBundle::layout.html.twig" %}
	
{% block head %}
	<link rel="icon" sizes="16x16" href="{{ asset('favicon.ico') }}" />
	<link rel="stylesheet" href="{{ asset('bundles/acmedemo/css/demo.css') }}" />
{% endblock %}
					
{% block title 'Demo Bundle' %}
							
{% block body %}
	<!-- some code -->
{% endblock %}

Je ne vais pas dire "dans le pur style Django" (au risque de me faire lyncher), mais c'est une syntaxe que j'apprécie tout particulièrement: c'est clair, ça flatte la rétine, on comprend ce qu'on fait, et surtout, on ne se répète pas !