Symfony

DÉMARRER UN PROJET SYMFONY

D

Mardi 21 février 2017

Mis à jour le mercredi 20 décembre 2017

Démarrer un projet Symfony

Télécharger Symfony Installer

Télécharger le Symfony installer en exécutant cette commande :
php -r "readfile('https://symfony.com/installer');" > symfony


Si une erreur comme celle-ci apparait :
cURL error 60: SSL certificate problem: unable to get local issuer certificate.
Faire :
Télécharger ce fichier : https://curl.haxx.se/ca/cacert.pem
Mettre ce fichier dans un dossier pour qu'il y reste une longue période sans que personne n'y touche. A la racine de votre disque dur par exemple.
Dans le fichier php.ini, chercher les lignes suivantes et modifier les :
; Pour Linux et macOS
curl.cainfo = "/chemin/vers/cacert.pem"
; Pour Windows
curl.cainfo = "C:\chemin\vers\cacert.pem"

[Vidéo d'exemple de téléchargement de l'installeur Symfony]

Créer un projet Symfony

Mettre le fichier symfony dans un dossier vide, puis créer un projet en exécutant la commande :
php symfony new my_project_name
ou en précisant la version de Symfony souhaitée :
php symfony new my_project_name 2.8

[Vidéo d'exemple de création d'un projet Symfony en version 2.8]

Droits sous Linux

Sous Linux, il faut donner les droits à Symfony d'écrire dans les répertoires /app/cache/ et /app/logs/. Si vous ne donnez pas les droits, vous aurez cette belle erreur :
[InvalidArgumentException]
The directory "/.../Symfony/app/cache/dev/annotations" is not writable
Pour donner ces droits, exécuter ces deux commandes :
chmod 777 -R app/cache/
chmod 777 -R app/logs/


Supprimer le bundle par défaut

Supprimer le bundle par défaut en suivant les instructions de la documentation officielle.
Ne pas oublier de supprimer les services importés qui étaient dans ce bundle dans app/config/services.yml.
Ne pas oublier non plus dans composer.json, de remplacer :
"autoload": {
        "psr-4": {
            "AppBundle\\": "src/AppBundle"
        },
        "classmap": [
            "app/AppKernel.php",
            "app/AppCache.php"
        ]
    },
Par :
"autoload": {
        "psr-0": {
            "": "src/"
        },
        "classmap": [
            "app/AppKernel.php",
            "app/AppCache.php"
        ]
    },
Puis d'exécuter composer dumpautoload. (Source Autre source)

Initialiser Git

git init
git add .
git commit -am "Initial commit - Cleaned Symfony project"


Installer les bundles incontournables

Doctrine-fixture-bundle

composer require --dev doctrine/doctrine-fixtures-bundle
Dans app/AppKernel.php, rajouter la ligne :
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
$bundles = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
}


StofDoctrineExtensionsBundle (Sluggable)

composer require stof/doctrine-extensions-bundle
Dans app/AppKernel.php, rajouter la ligne :
$bundles = array(
// ...
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
);
Et dans app/config/config.yml, rajouter :
# Stof\DoctrineExtensionsBundle configuration
stof_doctrine_extensions:
orm:
default:
sluggable: true


Créer un premier bundle

Suivre la documentation officielle.
php bin/console generate:bundle
Puis suivre les instructions.

Personnaliser les pages d'erreurs

Suivre la documentation officielle.
Copier le dossier vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\Resources\views dans app\Resources\TwigBundle\.
La vue appelée en fonction du fichier demandé et du code d’erreur sera error404.json.twig ou error500.html.twig par exemple. Si elle n’existe pas, la vue error.json.twig ou error.xml.twig sera appelée. Si elle n’existe pas, la vue error.html.twig sera appelée.

Insérer un fil d'Ariane

Je conseille ce fil d'Ariane simple d'utilisation et très bien expliqué.

Quelques commandes utiles

Démarrer l'application Symfony

Attention, vous devrez préalablement démarrer votre base de données (WAMP/LAMP/MAMP pour les bases de données MySQL, MongoDB...)
php bin/console server:run

Créer la base de données

php bin/console doctrine:database:create

Créer une entité

php bin/console generate:doctrine:entity
Puis suivre les instructions.

Générer les getters/setters d'une entité

Pour générer les getters/setters d'une entité que vous avez modifié :
php bin/console doctrine:generate:entities MyBundle:MyEntity


Lister vos routes

Pour voir toutes les routes que vous avez créées, cela peut être utile en cas de debug :
php bin/console debug:router


Lister les namespace Twig

Pour afficher des informations de debug sur Twig, pour afficher la liste des namespace par exemple, si vous ne comprenez pas pourquoi un render() vous renvoi l'erreur "fichier introuvable" :
php bin/console debug:twig
Source

Opérations CRUD

La documentation de Symfony indique clairement quelques exemples pour faire les opérations élémentaires (Create, Read, Update, Delete).


Une erreur ? une question ? une critique ? une faute ? un conseil ? ou tout simplement un merci ?

Lâche ton commentaire


Lk Ssl Le mercredi 27 novembre 2019 à 17:32:56
Très bon tutoriel ;)
Je suis sur un serveur Linux externe équipé LAMP et pour accéder à ma page web Symfony depuis mon host, je lance cette commande dans mon server :
php bin/console server:run 0.0.0.0:8000

ps : si vous avez d'autres suggestions je suis preneur.

David Le jeudi 28 novembre 2019 à 10:39:38
Salut,

en effet, quand on lance "php bin/console server:run", il utilise par défaut l'adresse "localhost" et le premier port de disponible à partir du port 8000, donc cela revient au même dans certains cas.

Ce n'est pas une suggestion mais une information, tu peux aussi utiliser les commandes "php bin/console server:start" et "php bin/console server:stop" pour lancer/arrêter le serveur sans que cela bloque ta fenêtre de commande.