Michael BOUVY
CTO E-commerce

Initialisation d'un projet Symfony 1.4 en 5 étapes

php symfony framework doctrine
Published on 2011/08/11

Logo Symfony

Car comme moi, vous l'avez sûrement souvent cherchée (et souvent trouvée dans le tutorial Jobeet), la procédure d'installation et configuration initiale de Symfony 1.4. Je vais donc tenter de résumer cela en 5 petites étapes, sur l'environnement suivant :

  • PHP 5.3.2
  • Apache 2.2.14
  • Ubuntu 10.04

1. Téléchargement et installation

$ mkdir /var/www/sfProject
$ cd /var/www/sfProject
$ mkdir -p lib/vendor # Bonne pratique : on place Symfony dans ce sous-dossier
$ wget http://www.symfony-project.org/get/symfony-1.4.13.tgz
$ tar -zxf symfony-1.4.13.tgz
$ rm -f symfony-1.4.13.tgz # On supprime l'archive plus nécessaire
$ mv symfony-1.4.13 symfony

Vous avez désormais Symfony 1.4.14 installé dans /home/user/www/sfProject/lib/vendor/symfony.

2. Initialisation d'un projet

Un projet Symfony peut regrouper plusieurs applications (souvent 2 : frontend et backend), elles-même composées de modules. Par exemple, dans le cadre d'un projet de blog, nous aurons :

  • Projet = MonBlog
  • Applications = frontend, backend
  • Modules = billets, commentaires ...

Nous allons donc générer notre nouveau projet Symfony :

$ cd /var/www/sfProject
$ php lib/vendor/symfony/data/bin/symfony generate:project sfProject

Votre projet Symfony sfProject est désormais déployé dans /home/user/www/sfProject. Dans la foulée, nous allons générer la première application de notre projet sfProject : le frontend, autrement dit la partie visible de votre site.

$ php symfony generate:app frontend

On en profite également pour donner à notre application (au sens large) les droits d'écriture sur les dossier de cache et de logs Symfony :

$ chmod 777 cache/ logs/

3. Configuration d'Apache

Afin de fonctionner correctement de de façon sécurisée, un projet Symfony nécessite un minimum de configuration de votre serveur web Apache. Nous allons donc créer dans /etc/apache2/sites-available/ le fichier sfProject :

sudo nano /etc/apache2/sites-available/sfProject

On insère dans ce fichier les informations suivantes :

Listen 127.0.0.1:8080
<VirtualHost 127.0.0.1:80>
  DocumentRoot "/var/www/sfProject/web"
  DirectoryIndex index.php

  <Directory "/var/www/sfProject/web">
    AllowOverride All
    Allow from All
  </Directory>

  Alias /sf /var/www/sfProject/lib/vendor/symfony/data/web/sf

  <Directory "/var/www/sfProject/lib/vendor/symfony/data/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

On finit en activant ce profil de site et en redémarrant Apache :

sudo a2ensite sfProject
sudo service apache2 restart

Votre projet Symfony est désormais accessible sur http://localhost:8080, et doit pour l'instant ressembler à ça :

4. Configuration MySQL et création du modèle de données

En premier lieu, nous allons renseigner les identifiants de connexion à notre base MySQL dans un fichier de configuration Symfony, grâce à la commande suivante :

php symfony configure:database "mysql:host=localhost;dbname=myDatabase" myUser mYsEcret

Le fichier config/databases.yml est alors créé, nous passons donc au modèle de données. Afin de créer un modèle de données parlant, nous allons reprendre l'exemple de création d'un projet de blog. Nous allons commencer très simplement avec la gestion des billets (post) et des commentaires (comment). Ouvrez avec votre éditeur préféré le fichier config/doctrine/schema.yml.

Post:
  tableName: post
  columns:
    id:         { type: integer, primary: true, autoincrement: true }
    title:      { type: string(255), notnull: true }
    content:    { type: string(4000), notnull: true }
    author:     { type: string(255), notnull: true }
    created_at: { type: timestamp, notnull: true }
    updated_at: { type: timestamp, notnull: true }

Comment:
  tableName: comment
  columns:
    id:         { type: integer, primary: true, autoincrement: true }
    post_id:    { type: integer, notnull: true }
    content:    { type: string(4000), notnull: true }
    author:     { type: string(255), notnull: true }
    created_at: { type: timestamp, notnull: true }
    updated_at: { type: timestamp, notnull: true }
  relations:
    Post:
      local:    post_id
      foreign:  id
      type:     one

On sauvegarde notre schéma, puis on génère le modèle correspondant ainsi que les formulaires et filtres associés :

$ php symfony doctrine:build-model
$ php symfony doctrine:build-forms
$ php symfony doctrine:build-filters

Une fois le modèle créé dans Symfony, nous allons générer les requêtes SQL nécessaires à la création des tables correspondantes dans notre base MySQL, et exécuter celles-ci :

$ php symfony doctrine:build-sql
$ php symfony doctrine:insert-sql

5. Création d'un premier module : post

php symfony doctrine:generate-module --with-show --non-verbose-templates frontend post Post

On génère donc le module post, dans l'application frontend, basé sur la classe Post définie dans le schéma vu plus haut. Rendez-vous sur http://localhost:8080/frontend_dev.php/post.

Ca y est, votre premier projet Symfony fonctionne !

Dans le cadre d'un tutorial à venir, plus complet, portant sur la réalisation d'une plateforme de blog, toujours basée sur Symfony 1.4.

Au programme, entre autres, gestion des commentaires, des utilisateurs, un espace d'administration ...

Michael BOUVY

I'm Michael BOUVY, CTO and co-founder of Click&Mortar, a digital agency based in Paris, France, specialized in e-commerce.

Over the last years, I've worked as an Engineering Manager and CTO for brands like Zadig&Voltaire and Maisons du Monde.

With more than 10 years experience in e-commerce platforms, I'm always looking for new challenges, feel free to get in touch!