Cours Symfony
Cours Symfony
Cours Symfony
(Une introduction)
Nicolas de Rugy-Altherre
Sylvain Perifel
Cristina Sirangelo
▶ Intérêts :
• structuration du code (MVC)
• simplification du développement
• nombreux modules existants (bibliothèque)
▶ Points saillants :
• routage facile et url propres (via annotations)
• contrôleurs : PHP et objet
• manipulation des bases de données : Doctrine
• langage de templates : Twig
• gestion de formulaires facilitée
• etc.
Plan
1. Démarrage et organisation
2. Templates
3. Contrôleurs
4. Base de données
5. Formulaires
Plan
1. Démarrage et organisation
2. Templates
3. Contrôleurs
4. Base de données
5. Formulaires
Installation
▶ Nouveau projet :
symfony new mon_projet
→ télécharge le code nécessaire dans le répertoire
mon_projet
▶ Serveur de développement :
php bin / console server : start
→ écoute sur http://localhost:8000
Modèle-vue-contrôleur
▶ Vues en Twig :
• langage de templates simple et puissant
• une vue par « type de page »
• héritage
▶ Modèle en MySQL :
• utilisation de Doctrine (plus haut niveau)
• objet
Organisation des fichiers
▶ Deux répertoires pour développer : src (code PHP) et
app (le reste : configuration, templates, etc.)
• src/AppBundle/Controller : les contrôleurs
• src/AppBundle/Entity : les classes pour la base de
données
• app/Resources/views : les vues (templates)
• app/config : les fichiers de configuration
▶ Autres répertoires :
• web : contient les fichiers publiquement accessibles
(images, CSS, etc.)
• bin : contient les exécutables (notamment console)
• var : cache, logs, etc.
• tests : pour les tests automatiques
• vendor : les modules additionnels
Plan
1. Démarrage et organisation
2. Templates
3. Contrôleurs
4. Base de données
5. Formulaires
base.html.twig
{% block stylesheets %}
{{ parent () }}
<link href="{{ asset('css/exemple.css ') }}" rel="stylesheet" />
{% endblock %}
{% block body %}
<h1 >Bienvenue </h1 >
{% endblock %}
Exemple
Template appelé avec l’objet articles en argument :
{% extends 'base.html.twig ' %} (héritage)
{% block title %} Exemple {% block title %} (bloc écrasé)
{% block stylesheets %}
{{ parent () }} (inclure le contenu du bloc parent)
<link href="{{ asset('css/exemple.css ') }}" rel="stylesheet" />
{% endblock %}
{% block body %}
<h1 >Bienvenue </h1 > (passé en paramètre)
{% for article in articles %} (boucle)
<a href="{{ path('voir ', {'id ':article.id}) }}" >{{ article.title }}</a>
{% endfor %}
(lien avec passage de paramètre)
<img src="{{ asset('images/monet.jpg ') }}" alt="Monet" />
(lien vers un doc public)
{% endblock %}
Plan
1. Démarrage et organisation
2. Templates
3. Contrôleurs
4. Base de données
5. Formulaires
Base
Routage et code simples (DefaultController) :
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
1. Démarrage et organisation
2. Templates
3. Contrôleurs
4. Base de données
5. Formulaires
Doctrine
▶ Communication facilitée avec la base de données
▶ Entités représentées par des objets
▶ Configuration dans app/config/parameters.yml
▶ Définir une table :
php bin/console doctrine:generate:entity
(script interactif )
▶ Crée la classe src/AppBundle/Entity/Nom_table.php
comme interface abstraite pour la base, et le fichier
src/AppBundle/Repository/Nom_tableRepository.php
(initialement vide) où les requêtes principales seront
codées.
▶ Créer la table dans la base :
php bin/console doctrine:schema:update --force
Insertion
.
Requêtes préprogrammées
$repository = $this ->getDoctrine ()
->getRepository('AppBundle:Product ');
1. Démarrage et organisation
2. Templates
3. Contrôleurs
4. Base de données
5. Formulaires
Formulaires
$form ->handleRequest($request );
if ($form ->isSubmitted () && $form ->isValid ()) {
$em = $this ->getDoctrine ()-> getManager ();
$em ->persist($task );
$em ->flush ();
return $this ->redirectToRoute('task_success ');
}
{{ form_start ( form ) }}
{{ form_widget ( form ) }}
{{ form_end ( form ) }}
http://symfony.com/doc/current/index.html