0% ont trouvé ce document utile (0 vote)
5 vues111 pages

Introduction à Symfony 3.x pour POO

Le document présente un module sur la programmation orientée objet avancée avec une introduction au framework Symfony. Il couvre les objectifs du module, les prérequis, l'organisation, ainsi que des rappels sur le modèle MVC et les spécificités de Symfony 3.x. Des informations sur l'installation, la création de projets et la configuration de Symfony sont également fournies.

Transféré par

Heriniaina Andriam
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues111 pages

Introduction à Symfony 3.x pour POO

Le document présente un module sur la programmation orientée objet avancée avec une introduction au framework Symfony. Il couvre les objectifs du module, les prérequis, l'organisation, ainsi que des rappels sur le modèle MVC et les spécificités de Symfony 3.x. Des informations sur l'installation, la création de projets et la configuration de Symfony sont également fournies.

Transféré par

Heriniaina Andriam
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

M4D203D - POO Avancée

Découverte de Symfony

David Annebicque

IUT de Troyes

@DavidAnnebicque

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 1 / 111


Sommaire

5 Vues
1 Organisation
6 Routes
2 Rappels MVC
7 Git
3 Introdcution
8 Entity (model)
4 Symfony 3.x
9 Formulaires

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 2 / 111


Sommaire

1 Organisation

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 3 / 111


Objectifs

Objectifs du module :
Maîtriser les concepts avancés de la programmation orientée objet
Utiliser et appréhender les concepts d’un framework MVC
Prérequis :
Algorithmique
Programmation Orientée Objet
Base de données
Concepts MVC

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 4 / 111


Organisation

Organisation du module :
16 TP
Le projet S4
1 évaluation écrite (dernier TD)
1 note pratique

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 5 / 111


Organisation

Supports : [Link]

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 6 / 111


Sommaire

2 Rappels MVC

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 7 / 111


Rappels MVC : Pattern Design

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 8 / 111


Sommaire

3 Introdcution
Frameworks
Qu’est ce que Symfony

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 9 / 111


Qu’est ce qu’un framework ?

En programmation informatique, un framework ou structure logicielle est un ensemble


cohérent de composants logiciels structurels, qui sert à créer les fondations ainsi que les
grandes lignes de tout ou d’une partie d’un logiciel (architecture). Un framework se
distingue d’une simple bibliothèque logicielle principalement par :
son caractère générique, faiblement spécialisé, contrairement à certaines
bibliothèques ; un framework peut à ce titre être constitué de plusieurs
bibliothèques chacune spécialisée dans un domaine. Un framework peut néanmoins
être spécialisé, sur un langage particulier, une plateforme spécifique, un domaine
particulier : reporting, mapping, etc. ;
le cadre de travail (traduction littérale de l’anglais : framework) qu’il impose de par
sa construction même, guidant l’architecture logicielle voire conduisant le
développeur à respecter certains patterns ; les bibliothèques le constituant sont alors
organisées selon le même paradigme.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 10 / 111


Qu’est ce qu’un framework ?

Les frameworks sont donc conçus et utilisés pour modeler l’architecture des logiciels
applicatifs, des applications web, des middlewares et des composants logiciels. Les
frameworks sont acquis par les ingénieurs, puis incorporés dans des logiciels applicatifs
mis sur le marché, ils sont par conséquent rarement achetés et installés séparément par
un utilisateur final.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 11 / 111


framework orienté objet

En programmation orientée objet, un framework est typiquement composé de


classes mères qui seront dérivées et étendues par héritage en fonction des besoins
spécifiques à chaque logiciel qui utilise le framework.
Avec un framework orienté objets, le programmeur qui utilise le framework pourra
personnaliser les éléments principaux du programme par extension, en utilisant le
mécanisme d’héritage : créer des nouvelles classes qui contiennent toutes les
fonctionnalités que met en place le framework, et en plus ses fonctionnalités propres,
créées par le programmeur en fonction des besoins spécifiques à son programme.
Le mécanisme d’héritage permet également de transformer des fonctionnalités
existant dans les classes du framework.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 12 / 111


framework orienté objet

Avantages
Pour éviter des erreurs dans l’organisation des appels
Éviter les appels directs aux commandes PHP
Préférer les versions des Frameworks qui apportent leur lot de contrôles.
Plus grand portabilité du code
Ne pas réinventer la roue
La gestion des formulaire, des utilisateurs, ...

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 13 / 111


framework orienté objet

Inconvénients
Apprentissage d’une couche supplémentaire
La majorité des fonctionnalités PHP sont redéfinies
Généralement apprentissage d’un moteur de template
Apprentissage de l’utilisation du framework choisit
Ses classes, ses objets, sa logique !

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 14 / 111


Quelques frameworks PHP

Symfony (1er framework en europe)


Laravel (1er framework PHP aux USA)
Sylex (framework leger)
CodeIgniter
CakePHP
Zend
...

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 15 / 111


Petite histoire d’un framework français

Framework MVC en PHP 5 et PHP 7, libre


Développé en 2005 par la société Sensio pour répondre à ses besoins
Division de la société Sension en deux entités l’agence Web et l’entreprise qui
soutient et maintient Symfony : SensioLabs, dirigée par Fabien Potencier, l’auteur
de Symfony
Connectable à presque tous les SGBD
De nombreux Bundles, contributeurs, utilisateurs
Framework français !, De renommée mondiale

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 16 / 111


Structure de Symfony

Symfony se base sur un noyau qui permet de faire fonctionner divers "composants" (ou
bundles) afin de proposer un framework robuste, mais qui peut exploiter de nombreux
outils provenants de différentes sources.
Un bundle (ou composant) est une brique qui est indépendante du noyau symfony (mais
peut dépendre d’autres bundles) et qui répond à une problématique précise : Mail,
Templates, Base de données, ...
Symfony utilise dans sa version complète et fonctionnelle 46 bundles en plus du noyau !
Nombre de ces bundles sont développés par SensioLabs.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 17 / 111


Structure de Symfony

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 18 / 111


De la version 2 à la version 3

Les défis de la version 3 sont multiples :


Optimisation des performances
Sécurité accrue
Compatibilité PHP 7
Simplification d’utilisation
Pour cela SensioLabs à dès la vers 2.3 de Symfony commencé à mettre en place des
éléments de la version 3.0 et indiquer aux développeurs les éléments qui allait disparaître.
Cela s’est fait jusque la version 2.8, qui est en fait une pré-version 3.0. L’idée est que
toute application tournant sur une version 2.3 et plus, et sans aucune erreur de type
"deprecated" soit compatible avec Symfony 3.0 sans modifications majeures du code.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 19 / 111


Quoi de neuf dans la version 3

Rien ! Puisque tous les éléments principaux ont été mis en place sur la version 2.7 et
2.8...
La version 3.0 n’est pas non plus une LTS (Long Term Support).
La vraie différence entre la version 2.8 et la version 3.0 est la suppression définitive des
codes "deprecated".
Dans sa version 3.0, Symfony requière PHP 5.5.9 au minimum, et est compatible PHP 7.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 20 / 111


Symfony 2.8 a.k. 3.0

Symfony 2.8 a intégré plus de 100 nouveautés/améliorations par rapport aux versions
précédentes. En voici quelques-unes
Nouvel installeur, Console redesigné pour plus de lisibilité
Support de LDAP
Web prodiler redesigné
Nouvelle structure de repertoire (même si l’ancienne reste possible)
Suppression de assetic et de la gestion "web" des fichiers css/js/images
Optimisation de Twig, YAML, ...
Optimisation des tests, ...

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 21 / 111


Symfony 2.8 a.k. 3.0

Même si tout a été fait pour assurer la compatibilité entre les versions avant 2.8 et la
version 3.x, il y a quand même pas mal de choses qui ont évolué dans la syntaxe et
l’organisation des fichiers.
Tout ce cours n’évoquera que la syntaxe de Symfony 3.3 / 3.4 (LTS) avec la nouvelle
organisation recommandée, les nouvelles syntaxes, méthodes, ... Vous trouverez toujours
disponible sur le site de Symfony la documentation des versions avant la 2.8, et sur les
forums tous les détails de ces précédentes versions.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 22 / 111


Sommaire

4 Symfony 3.x
Configuration nécessaire
Mon premier projet Symfony
Allez un peu plus loin dans l’installation
Comprendre la structure
Fonctionnement de Symfony

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 23 / 111


Configuration nécessaire

Symfony fonctionne sur tous les types de serveurs (windows, linux, ou mac).
Evidemment la solution linux est la plus pratique et simple d’utilisation !
Pour installer Symfony, il est un gestionnaire de dépendance basé sur Composer
[Link] qui se nomme "Symfony". Ce gestionnaire permet d’installer
tous les bundles nécessaire au bon fonctionnement de Symfony, et vous permettra de
maintenir à jour Symfony ou d’installer d’autres bundles.
Vous pouvez le télécharger depuis le site de symfony [Link] ou
l’utiliser en ligne de commande directement.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 24 / 111


Configuration nécessaire

Vous aurez aussi besoin des éléments suivants :


Un serveur web (nginx ou apache)
PHP (5.5.9 minimum)
Une base de données
Git (nous y reviendrons)
Un IDE PHP (PhpStorm par exemple)

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 25 / 111


Installation de l’installer

Installation de "Symfony Installer" sous linux ou mac

Listing 1 – Installation sous Linux et Mac


1 $ sudo mkdir -p / usr / local / bin
2 $ sudo curl - LsS https :// symfony . com / installer -o / usr / local / bin / symf
3 $ sudo chmod a + x / usr / local / bin / symfony

Installation de "Symfony Installer" sous windows, en vous placant dans votre repertoire
www par exemple

Listing 2 – Installation sous windows


1 $ php -r " file_put_contents ( ’ symfony ’ , ␣ file_get_contents ( ’ https :// sym

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 26 / 111


Installation de l’installer

Sous Linux et Mac une commande "symfony" a été ajouté. Sous Windows, vous devenir
définir la variable d’environnement PATH avec le chemin vers le repertoire contenant le
"Symfony Installer" ou alors vous pouvez utiliser :

Listing 3 – Utilisation sous windows


1 $ php symfony . phar

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 27 / 111


Création d’un projet Symfony

Sauf mentions contraires, toutes les commandes qui suivent fonctionnes quelque soit
l’OS.
En vous positionnant de le répertoire public_html ou www, exécutez la commande
suivante :

Listing 4 – Nouveau Projet Symfony


1 $ symfony new my_project_name

Cette commande va installer Symfony et les dépendances nécessaires. Le téléchargement


peut prendre quelques minutes.
Cette commande vérifie également si votre système est correctement configuré pour
exécuter Symfony.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 28 / 111


Création d’un projet Symfony

Symfony embarque un serveur web qui permet d’exécuter votre projet même si vous
n’avez pas de serveur web d’installé.
Pour cela il faut vous placer dans le répertoire de votre projet, puis exécuter :

Listing 5 – Executer le server web de Symfony


1 php bin / console server : run

Tout en laissant cette console ouverte, rendez-vous à l’URL suivante :


[Link]
Vous devriez vois une page indiquant la version de Symfony.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 29 / 111


Création d’un projet Symfony

Quel serveur utiliser


Cette solution est rapide pour tester un petit script. Il est néanmoins préférable d’avoir
un serveur web d’installé et de configuré. Vous pouvez choisir NGinx ou Apache. Vous
trouverez les éléments sur ce lien
[Link]

Dans ce cas, l’URL de votre projet sera du type :


[Link]

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 30 / 111


Création d’un projet Symfony

La dernière étape consiste à configurer votre projet, pour cela rendez-vous sur l’URL
[Link] ou
[Link] et remplissez le formulaire.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 31 / 111


Maintenir à jour son projet Symfony

Symfony est dépendant de nombreux bundles qui peuvent être mis à jour de manière
régulière. Symfony lui même aura régulièrement des mises à jours. Ces mises à jour sont
à faire de manière régulière. Pour cela, c’est très simple il suffit de lancer la commande

Listing 6 – Update Symfony


1 composer update

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 32 / 111


Architecture de Symfony

Symfony utilise de nombreux repertoire et propose une logique d’organisation des


différents fichiers que nous allons écrire. Cependant, Symfony permet toutes les
organisations, dans la mesure ou le framework utilise les "Namespaces" afin d’associer
un fichier à un chemin.
Voici la structure recommandée
app/ : La configuration de votre application, mais aussi l’emplacement des vues
(template) et des traductions
bin/ : Les exécutables, notamment la console
tests/ : pour les tests fonctionnels que l’on pourrait écrire

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 33 / 111


Architecture de Symfony

var/ : Les fichiers générés par Symfony (cache, logs, ...). Il faut attribuer les droits
en écrire 755 ou 777 sur cache et logs
vendor/ : Les librairies tierces, c’est là aussi que se trouve tout le cœur de Symfony
et les bundles
web/ : Le répertoire principal, le "root".

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 34 / 111


Le répertoire web

C’est dans ce répertoire que se trouve l’accès à Symfony et les fichiers des utilisateurs
(css, js, images, ...)
On trouve aussi dans ce répertoire les contrôleurs frontaux. Le contrôleur frontal est la
porte d’entrée dans Symfony. Tout passe forcément par lui. Son utilisation est
transparente pour le visiteur.
Il existe deux contrôleurs frontaux : [Link] et app_dev.php.
[Link] : C’est le contrôleur pour les visiteurs, pour un site en production. Il n’y a
pas de débuggage, mais des fichiers logs. Utilisation du cache et compilation des
fichiers CSS et JS.
app_dev.php : C’est le contrôleur pour les développeurs. Beaucoup d’outils d’aide
(profiler, ...), pas d’utilisation du cache

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 35 / 111


Le répertoire web

C’est dans ce répertoire que se trouve l’accès à Symfony et les fichiers des utilisateurs
(css, js, images, ...)
On trouve aussi dans ce répertoire les contrôleurs frontaux. Le contrôleur frontal est la
porte d’entrée dans Symfony. Tout passe forcément par lui. Son utilisation est
transparente pour le visiteur.
Il existe deux contrôleurs frontaux : [Link] et app_dev.php.
[Link] : C’est le contrôleur pour les visiteurs, pour un site en production. Il n’y a
pas de débuggage, mais des fichiers logs. Utilisation du cache et compilation des
fichiers CSS et JS.
app_dev.php : C’est le contrôleur pour les développeurs. Beaucoup d’outils d’aide
(profiler, ...), pas d’utilisation du cache

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 36 / 111


Le répertoire app

C’est dans ce répertoire que l’on trouve le noyau ([Link]), les


configurations (*.yml) et les "Resources" (vues, traductions).
Le noyau est le second élément essentiel de Symfony, il permet de configurer les
bundles que l’on utilise. Normalement, on ne modifie jamais manuellement ce
fichier.
Par contre, on peut modifier les fichiers de configuration. Il y en a un par
"environnement" (soit dev soit prod par défaut). On peut donc avoir une
configuration différente selon les cas. Pratique pour les base de données par
exemple.
On trouve aussi le fichier de routage principal ([Link]), le fichier de sécurité
([Link]), la gestion des services ([Link]).
Enfin, un fichier [Link] qui contient les données de la base de données, du
serveur de mail, ...

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 37 / 111


Notion de Bundle

C’est l’élément le plus puissant de Symfony


Un bundle peut être vu comme un plugin dans un logiciel ou un CMS. Mais on
parle de bundle, car dans Symfony tout est bundle. Le noyau est un bundle,
l’installation de Symfony est l’utilisation de plusieurs bundle
Tout le code que vous allez écrire va constituer un bundle avec ses images, son css,
son javascript, ...
Un bundle est conçu pour être réutilisé dans d’autres projets.
Il existe plus de 2000 bundles mis à disposition par la communauté.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 38 / 111


Fonctionnement de Symfony

Outre le concept MVC, Symfony utilise deux composants essentiels et spécifique :


Le Kernel (cœur du framework, noyau en français)
Connaître son code n’est pas indispensable
Sachez qu’il envoi des évènements qu’il est possible d’écouter
Le service container
Indispensable
Il contient des service (comme son nom l’indique)
Il en existe des prédéfinis, nous en créerons des personnels

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 39 / 111


Fonctionnement de Symfony

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 40 / 111


Fonctionnement de Symfony

Symfony exploite les fondements du protocole HTML


REQUEST (requête, demande) de la part du client (navigateur)
POST, GET, ...
Symfony traite la demande, construit la réponse et la retourne
RESPONSE
Contient un code (200 OK, 404 erreur, ...)
Et un contenu (JSON, HTML, CSV, PDF, ...)

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 41 / 111


Sommaire

5 Vues

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 42 / 111


Twig, mon ami

Un template est en fait un fichier texte qui peut générer tous les formats basées sur du
texte (HTML, XML, CSV, JSON, LaTeX, ...).
Généralement on utilise des templates "PHP", c’est à dire mêlant du code texte
(souvent HTML) et du PHP. Ensuite tout cela est interprété, et traduit en quelque
chose d’affichable (souvent du HTML).
Cette solution est pratique et rapide à mettre en place, mais syntaxiquement lourde à
écrire, et souvent rejetée par les intégrateurs qui n’aiment pas écrire du PHP.
Nombreux frameworks utilisent donc des moteurs de template ne se basant pas sur PHP
directement. (en réalité, tout le code sera traduit en PHP ? puis en HTML ensuite).

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 43 / 111


Twig, mon ami

Listing 7 – PHP-Template
1 ...
2 <body >
3 <h1 > <? php echo $page_title ? > </ h1 >
4 <ul id = " navigation " >
5 <? php foreach ( $navigation as $item ): ? >
6 <li >
7 <a href = " <? php ␣ echo ␣ $item - > getHref () ␣ ? > " >
8 <? php echo $item - > getCaption () ? >
9 </a >
10 </ li >
11 <? php endforeach ? >
12 </ul >

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 44 / 111


Twig, mon ami

Listing 8 – TWIG-Template
1 <! DOCTYPE html >
2 <html >
3 <head >
4 < title > Welcome to Symfony ! </ title >
5 </ head >
6 <body >
7 <h1 >{{ page_title }} </ h1 >
8 <ul id = " navigation " >
9 {% for item in navigation %}
10 <li > < a href = " {{ ␣ item . href ␣ }} " >{{ item . caption }} </ a > </ li >
11 {% endfor %}
12 </ul >
13 </ body >
14 </ html >

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 45 / 111


Syntaxe de twig

Twig utilise 3 notations :


{{ ... }} "Dit quelque chose" : permet d’écrire une variable ou le résultat d’une
expression
{% ... %} "Fait quelque chose" : permet de contrôler la logique du template.
Permet l’exécution de fonctionnalités comme les boucles ou les tests.
{# ... #} "Commente quelque chose" : Permet d’écrire un commentaire.
Twig utilise aussi la notion de filtre (noté avec |). Qui permet de faire des manipulations
sur les variables.

Listing 9 – Filtre
1 {{ title | upper }}

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 46 / 111


Syntaxe de twig

Twig intègre une très longue liste de tags, de filtre et de fonctions que vous pouvez
retrouver dans la documentation officielle : [Link]
Vous pouvez également créer vos propres filtres ou fonctions.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 47 / 111


Syntaxe de twig

Twig intégre également les structures de contrôles classiques


{% if ... %} ... {% elseif ... %} ... {% else %} ... {% endif %}
{% for ... in ... [if ... ] %} ... {% else %} {% endfor %}

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 48 / 111


Héritage et block

Il est fréquent dans un projet d’avoir des éléments communs à chacune des pages
(header, menu, footer, ...). La logique de SYmfony et d’un framework qui consiste à ne
jamais dupliquer du code, indique donc qu’il ne devrait y avoir qu’une seule fois la
structure du site web qu’on pourrait réutiliser autant que nécessaire.
C’est possible avec les templates et TWIG. Nous allons définir une base (on pourrait en
avoir plusieurs selon les contextes), et dans cette base définir des emplacements dans
lesquels nous pourrions venir mettre les éléments en fonction de la page choisie.
Dans TWIG cela s’appelle des block.
Reprennons le fichier [Link] par défaut.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 49 / 111


Héritage et block

Listing 10 – [Link]
1 ...
2 <head >
3 < title >{% block title %} Test Application {% endblock %} </ title >
4 </ head >
5 <body >
6 < div id = " sidebar " >
7 {% block sidebar %}
8 <ul > < li >... </ li > </ ul >
9 {% endblock %}
10 </ div >
11 < div id = " content " >
12 {% block body %}{% endblock %}
13 </ div >
14 ...

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 50 / 111


Héritage et block

Ce template défini le squelette du document HTML. Il ne devrait y avoir qu’une seule


fois ce type de code dans votre projet. Les block sont identifié avec les ligne {% block
nom %}. Le template définit 3 block : title, sidebar et body
C’est à dire qu’a chaque fois qu’on va utiliser ce template (en hérité) on pourra définir le
contenu de chacun de ces 3 block, sans modifier le reste de la structure.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 51 / 111


Héritage et block

Listing 11 – Exemple d’un template "fils"


1 {# app / Resources / views / blog / index . html . twig #}
2 {% extends ’ base . html . twig ’ %}
3
4 {% block title %} My cool blog posts {% endblock %}
5
6 {% block body %}
7 {% for entry in blog_entries %}
8 <h2 >{{ entry . title }} </ h2 >
9 <p >{{ entry . body }} </ p >
10 {% endfor %}
11 {% endblock %}

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 52 / 111


Héritage et block

Ce template est un template enfant/fils du template [Link]. La ligne 2, permet


de définir que ce template "hérite" (extends) du template [Link]. C’est grâce à
cette ligne que l’on peut écrire dans les block existant.
Comme vous le constatez il n’est pas nécessaire de définir tous les block présent dans le
parent, dans l’enfant. Ici pas de définition du block sidebar.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 53 / 111


Manipulation des variables

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 54 / 111


Sommaire

6 Routes

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 55 / 111


Routes

Présentation des routes sur Symfony (et découverte de la documentation officielle) :


[Link]

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 56 / 111


Sommaire

7 Git
Utiliser les Remotes

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 57 / 111


Versionning avec GIT

git est un logiciel de gestion de versions décentralisé. C’est un logiciel libre créé par
Linus Torvalds, auteur du noyau Linux, et distribué selon les termes de la licence
publique générale GNU version 2. En 2016, il s’agit du logiciel de gestion de versions le
plus populaire qui est utilisé par plus de douze millions de personnes

GitHub, Mercurial, GitLab, Tower, ... Sont des interfaces web qui utilisent Git pour gérer
les versions. On parle de "remote".

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 58 / 111


Versionning avec GIT

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 59 / 111


Versionning avec GIT

Git permet :
De savoir qui a modifié le code
de travailler simultanément sur un même fichier sans risque
de suivre les modifications, ajouts, et suppressions
de savoir à quoi servent les fichiers
de suivre les mises à jours en fonction des bugs déclarés
Simplement de faire une sauvegarde de son projet

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 60 / 111


Versionning avec GIT

Configuration de GIT :

Listing 12 – Activier les couleurs dans la console


1 git config -- global color . diff auto
2 git config -- global color . status auto
3 git config -- global color . branch auto

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 61 / 111


Versionning avec GIT

Configuration de GIT :

Listing 13 – Configurer votre pseudo et email


1 git config -- global user . name " votre_pseudo "
2
3 git config -- global user . email moi@email . com

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 62 / 111


Créer un nouveau dépôt

Vous positionner dans le répertoire de votre projet

Listing 14 – Initialiser votre dépôt


1 git init

C’est tout ! Vous venez de créer un nouveau projet Git dans le dossier où vous vous
trouvez. :) Un dossier caché .git vient tout simplement d’être créé.
Pour le moment le dossier est "configuré" pour GIT, mais il n’y a encore aucun fichier
de "surveillé" par GIT.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 63 / 111


Cloner un dépôt

Tout comme vous pouvez partager des fichiers sur des dépôts GIT public, vous pouvez
aussi récupérer des dépôts qui vous interessent ou sur lesquels vous aimeriez apporter
vos contributions.
Pour cela, il faut vous rendre sur le dépôt concerné en passant par GITHub par exemple.
Vous trouverez généralement la ligne à utiliser.

Listing 15 – Cloner un dépôt


1 git clone http :// github . com / symfony / symfony . git

Vous permet de cloner le dépôt de Symfony. (ce n’est pas une installation de Symfony !)

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 64 / 111


Le dossier .git

Git crée un dossier .git caché à la racine du dossier de votre projet (en création ou en
clone). Vous n’aurez pas à vous rendre dans ce dossier caché en temps normal, sauf
éventuellement pour modifier le fichier de configuration .git/config qui se trouve à
l’intérieur.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 65 / 111


Suivre les modifications

Listing 16 – Connaître les modificaitons


1 git status

Cette instruction indique les fichiers qui ont été modifié récemment

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 66 / 111


Processus d’utilisation de GIT

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 67 / 111


COMMIT

Une modification peut être l’ajout d’une ligne, de 100 lignes, la création de fichiers, leur
suppression, ... Toute action sur le répertoire dans sa globalité.
Vous pouvez essayer de créer ou modifier des fichiers et vous rendre compte du
comportement de git en faisant :

Listing 17 – Connaître les modificaitons


1 git status

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 68 / 111


COMMIT

Vous devriez avoir une liste des modifications que vous avez effectuées

Listing 18 – Connaître les différences


1 git diff

Vous apportera le détail ligne par ligne des modifications. Vous pouvez indiquer un
fichier spécifique

Listing 19 – Connaître les différences


1 git diff chemin / vers / votre / fichier

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 69 / 111


COMMIT

Vous avez une liste de fichier qui ont subis des modifications. Cependant, GIT ne le sait
toujours pas. Il faut maintenant lui dire de mémoriser ces modifications.
Mais avant cela, il est nécessaire de préciser les fichiers sur lesquels vous souhaitez
surveiller les modifications. En effet, un fichier de log, par exemple, va subir de
nombreuses modifications, mais il n’y a pas d’intérêt à partager/sauvegarder un tel
fichier.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 70 / 111


COMMIT - Méthode 1

Méthode 1 :

Listing 20 – Ajouter et Commiter des fichiers


1 git add nomfichier1 nomfichier2
2 git commit

La première ligne ajoute (add) les fichiers à "surveiller". La seconde ligne enregistre les
modifications dans GIT
Pour le vérifier faite :

Listing 21 – Connaître les différences


1 git status

Les fichiers que vous avez ajoutés doivent apparaître en vert.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 71 / 111


COMMIT - Méthode 2

Méthode 2 :

Listing 22 – Ajouter et Commiter des fichiers


1 git commit -a

Va commiter tous les fichiers présents dans un git status.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 72 / 111


COMMIT - Méthode 3

Méthode 3 :

Listing 23 – Ajouter et Commiter des fichiers


1 git commit nomfichier1 nomfichier2

Va commiter tous les fichiers listés.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 73 / 111


COMMIT

Il est dans tous les cas nécessaire de préciser à GIT les fichiers que vous venez de créer
(juste la première fois) avec

Listing 24 – Ajouter des nouveaux fichiers


1 git add fichiers

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 74 / 111


COMMIT

Lors d’un COMMIT, la console va vous demander de saisir du texte. Cette étape est
OBLIGATOIRE. Ce message est important car il doit préciser les modifications que
vous souhaitez sauvegarder. Soyez donc précis, tout en restant concis dans les
informations transmises.
On peut aussi écrire :

Listing 25 – Commit avec un message


1 git commit -m " mon ␣ message "

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 75 / 111


Remote

On vient de voir l’intérêt d’utiliser Git. Mais pour le moment tout le suivi de version est
stocké sur notre machine. Ce qui limite l’intérêt et ne permet donc pas une réelle
sauvegarde de notre travail, ni même un travail collaboratif.
Pour cela, il faut passer par un remote. On peut installer son propre remote assez
facilement sur un serveur, ou utiliser une solution existante : GitHub, GitLab, BitBucket,
Mercurial, ...

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 76 / 111


Créer son repository

Laissez par défaut le fichier [Link]


1 Pour cela il faut se rendre sur la solution choisie (GitHub par exemple) et créer
grâce à l’interface votre repository.
2 Remplissez les informations et laissez le fichier readme
3 Ensuite il faut cloner ce repository sur votre machine.
4 Puis déplacer votre projet dans ce nouveau répertoire
5 Ajouter les fichiers à suivre (git add)
6 Faire un COMMIT
7 Enfin envoyer les éléments sur le dépôt GitHub

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 77 / 111


Cloner un repository

Listing 26 – Cloner un repository


1 git clone lienFourniParGitHub

GitHub propose un lien HTTPS ou SSH pour chaque repository. Vous avez même la
ligne complète de disponible à copier/coller directement dans votre console.
Une fois cloné, copier/coller votre projet dans ce repertoire. Il est maintenant associé à
un remote. Vous devez dire quels sont les fichiers à suivre, et faire votre premier
COMMIT.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 78 / 111


Envoyer votre code vers un repository

Listing 27 – Envoyer votre code vers un repository


1 git push origin master

Origin designe le remote par défaut sur lequel sera envoyé le code. Il correspond au clone
fait précédemment. Master représente la "Branch" sur laquelle le code est envoyé.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 79 / 111


Récupérer votre code depuis un repository

Listing 28 – Récupérer votre code depuis un repository


1 git pull origin master

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 80 / 111


A vous de jouer

Créez votre dépôt/repository


Clonez le
Déplacez votre projet dans le nouveau répertoire
Ajoutez les fichiers
Faites votre COMMIT
Faites votre PUSH
Vérifiez sur le web votre travail.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 81 / 111


Sommaire

8 Entity (model)
Une entité est une classe

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 82 / 111


Une entité est une classe

Une entité est une classe


Au sens premier du terme, une entité est une classe PHP, qui répond exactement aux
mêmes possibilités que celles vues en S3.

Une entity n’est pas forcément une table dans votre base de données
Une entity représente une logique métier
Une entity peut :
Être indépendante et permettre à votre application d’exécuter des actions du métier
(calculs financiers, ...)
Récupérer des informations depuis des webservices (météos, flux twitter, ...)
Manipuler des tables de votre base de données

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 83 / 111


Une entité est une classe

Exemple d’une entité.


Cette entité possède 2 attributs, et
4 méthodes.
Elle n’est pas liée à une base de
données.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 84 / 111


Utilisation de l’entité dans un controller.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 85 / 111


Entité et Base de données

Si votre entity est une transposition d’une table de votre base de données alors il
vous faut un ORM (object-relational mapping ) pour faire le lien entre la table et
votre classe PHP
Dans Symfony le plus courant est doctrine (mais il existe Propel, ...)
Dans ce cas votre entity doit posséder des commentaires ...
En fait des annotations...
Elles sont propres à l’ORM choisit
Elles définissent le lien entre un paramètre de votre classe et un champ de votre base
de données
Grâce à ce système de description vous ne devriez jamais aller dans "PhpMyAdmin"
pour créer des tables !

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 86 / 111


Entité et Base de données

Doctrine permet donc de faire un "mapping" entre les éléments de votre table, issus de
votre base de données, et un objet PHP. Ce qui permet une manipulation plus aisée des
résultats d’une requête, mais aussi l’insertion ou la modification.
En fait, grâce à doctrine (ou un ORM) on manipule la base de données sans vraiment se
soucier des requêtes qui sont exécutées. Et cela devient intéressant si on doit changer de
serveur de base de données. Il n’est pas nécessaire de réécrire le code !

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 87 / 111


Entité et Base de données

Sou
[Link]

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 88 / 111


Utilisation de doctrine dans les entity

La documentation officielle de doctrine se trouve


[Link]
vous pourriez utiliser doctrine dans d’autres contexte qu’avec Symfony.
Si vous souhaitez utiliser Doctrine avec une de vos entités, c’est à dire lier le model
à une table, il faut ajouter :

1 use Doctrine \ ORM \ Mapping as ORM ;

Pour signifier à Symfony que vous voulez utiliser doctrine comme ORM.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 89 / 111


Utilisation de doctrine dans les entity

Exemple d’une entité avec Doctrine.


Les annotations permettent
"d’expliquer" comme cette classe
sera traduite en une table
Dans ce cas, une classe = une
table
Il est possible d’ajouter des
attributs et méthodes qui ne sont
pas liées à la table.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 90 / 111


Les bases de données et Doctrine

Mais...
Mais en fait, vous n’avez rien à écrire dans la majorité des cas. Bien sûr si vous
souhaitez faire des modifications, il faut comprendre et parfois écrire ces annotations.
Mais pour créer une table, on va utiliser la console ...

Démonstration de la console et de la création d’une table.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 91 / 111


Quelques commandes

Listing 29 – Créer une entité


1 php bin / console doctrine : generate : entity

Cette ligne permet de créer une nouvelle entité liée à une table de votre base de données.

Listing 30 – Mettre à jour une entité


1 php bin / console doctrine : generate : entities AppBundle : MonEntity

Cette ligne va permettre d’actualiser les getters et setters, mais aussi les relations,
lorsque vous modifiez manuellement les attributs de votre classe (i.e. ajoutez des
champs ou des relations). Attention cette commande n’efface pas les getters et setters
qui ne sont plus nécessaires.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 92 / 111


Une entité est une classe...

Vous êtes bien sûr libre :


D’ajouter des paramètres qui ne seront pas persistés en base de données
D’ajouter des getters et des setters pour répondre à votre logique métier
D’ajouter des méthodes.
N’oubliez jamais le constructeur ...
Par défaut il n’est pas présent, mais il peut être utilise pour
Initialiser des paramètres (champs ?)
Pour pré-remplir en fonction d’un paramètre d’autres champs,
...

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 93 / 111


Les formats de Doctrine

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 94 / 111


Les options de Doctrine

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 95 / 111


Les options de Doctrine

Toutes les possibilités des annotations et du mapping avec doctrine se trouvent sur la
documentation officielle : [Link]
doctrine-orm/en/latest/reference/[Link]

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 96 / 111


Une fois nos entity définies, que faire ?

Encore une fois Symfony va s’occuper de tout !


La première fois il faut créer la base de données

Listing 31 – Création de la base de données


1 php bin / console doctrine : database : create

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 97 / 111


Une fois nos entity définies, que faire ?

Ensuite il faut mettre à jour la base de données en fonction des modifications

Listing 32 – Mise à jour de la base de données


1 php bin / console doctrine : schema : update -- force

Attention
Il faut exécuter cette commande après chaque modification de vos entités

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 98 / 111


Une fois nos entity définies, que faire ?

Ensuite il faut mettre à jour la base de données en fonction des modifications

Listing 33 – Voir le code MySQL executé


1 php bin / console doctrine : schema : update -- dump - sql

Attention
Cette commande ne met pas à jour la base de données. Elle permet juste d’afficher les
requêtes qui seront exécutées. Cette ligne doit être exécutée en même temps qu’un
–force ou avant. Mais une fois le –force réalisé, il n’y a plus d’affichage possible.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 99 / 111


Manipuler les entités

On a déjà vu comment faire quand une entity ne dépend pas d’une base de données
Mais si cette entity est associée à un ORM, il faut procéder un peu différemment
pour exécuter les requêtes SQL

Listing 34 – Utilisation de Doctrine dans un controller


1 $doctrine = $this - > get ( ’ doctrine ’ );
2 ou
3 $doctrine = $this - > getDoctrine ();

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 100 / 111
Persister des objets dans la base de données

Listing 35 – Exemple de controller


1 use AppBundle \ Entity \ Product ;
2 ...
3 public function createAction ()
4 {
5 $product = new Product ();
6 $product - > setName ( ’ Keyboard ’ );
7 $product - > setPrice (19.99);
8 $product - > setDescription ( ’ Ergonomic ␣ and ␣ stylish ! ’ );
9
10 $em = $this - > getDoctrine () - > getManager ();
11 $em - > persist ( $product );
12 $em - > flush ();
13 ...
14 }

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 101 / 111
Persister des objets dans la base de données

Explication du code précédent :


Ligne 6 à 9 : On instancie un nouvel objet, et on lui donne des données.
Ligne 11 : On récupère un "manager". Ici, un manager associé à Doctrine. C’est le
Manager qui contient une connexion à la base de données
Ligne 12 : Cette ligne permet juste de dire à doctrine ($em) de s’occuper (manager)
l’instance de l’objet $product. Cette ligne n’a aucun effet sur la base de données.
ligne 13 : L’appel de la méthode flush(), Doctrine va regarder sur tous les objets de
son mapping s’il y a quelque chose à écrire ou modifier dans la base de données.
Dans cet exemple l’objet $product n’existe pas encore dans la base de données.
Donc l’entity manager va insérer l’objet dans la table product, il va exécuter une
requête INSERT.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 102 / 111
Récupérer des objets dans la base de données

Listing 36 – Exemple de controller


1 public function showAction ( $productId )
2 {
3 $product = $this - > getDoctrine ()
4 -> getRepository ( ’ AppBundle : Product ’)
5 -> find ( $productId );
6
7 if (! $product )
8 {
9 throw $this - > createNotFoundException (
10 ’ No ␣ product ␣ found ␣ for ␣ id ␣ ’. $productId
11 );
12 }
13 // do something , like pass the $product object into a template
14 }

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 103 / 111
Persister des objets dans la base de données

Explication du code précédent :


3 à 5 : Pour récupérer des données depuis une base de données (exécuter un
SELECT), il faut toujours utiliser le "repository". Le repository dispose de plusieurs
méthodes qui facilitent la récupération de données dans une table. On va voir
ensuite, qu’il est possible de créer nos propres méthodes dans le repository pour des
requêtes plus spécifiques.

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 104 / 111
Exemple de méthodes dans le repository

Listing 37 – Exemple de repository


1 $repository = $this - > getDoctrine () - > getRepository ( ’ AppBundle : Product ’
2 // query for a single product by its primary key ( usually " id ")
3 $product = $repository - > find ( $productId );
4 // dynamic method names to find a single product based on a
5 // column value
6 $product = $repository - > findOneById ( $productId );
7 $product = $repository - > findOneByName ( ’ Keyboard ’ );
8 // dynamic method names to find a group of products based on a
9 // column value
10 $products = $repository - > findByPrice (19.99);
11 // find * all * products
12 $products = $repository - > findAll ();

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 105 / 111
Exemple de méthodes dans le repository

Listing 38 – Exemple de controller


1 $repository = $this - > getDoctrine () - > getRepository ( ’ AppBundle : Product ’
2
3 // query for a single product matching the given name and price
4 $product = $repository - > findOneBy (
5 array ( ’ name ’ = > ’ Keyboard ’ , ’ price ’ = > 19.99)
6 );
7
8 // query for multiple products matching the given name , ordered by pr
9 $products = $repository - > findBy (
10 array ( ’ name ’ = > ’ Keyboard ’) ,
11 array ( ’ price ’ = > ’ ASC ’)
12 ); s

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 106 / 111
Mise à jour d’un objet

Listing 39 – Exemple de controller


1 public function updateAction ( $productId )
2 {
3 $em = $this - > getDoctrine () - > getManager ();
4 $product = $em - > getRepository ( ’ AppBundle : Product ’)
5 -> find ( $productId );
6
7 if (! $product ) {
8 throw $this - > createNotFoundException (
9 ’ No ␣ product ␣ found ␣ for ␣ id ␣ ’. $productId );
10 }
11 $product - > setName ( ’ New ␣ product ␣ name ! ’ );
12 $em - > flush ();
13 ...
14 }

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 107 / 111
Mise à jour d’un objet

La modification d’un objet se déroule toujours en trois étapes :


Récupérer l’objet à modifier (Ligne 3 et 4).
Modifier l’objet (ligne 11)
Mettre à jour la base de données (ligne 12)

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 108 / 111
Suppression d’un objet

Listing 40 – Exemple de controller


1 $em = $this - > getDoctrine () - > getManager ();
2 $em - > remove ( $product );
3 $em - > flush ();

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 109 / 111
Suppression d’un objet

La modification d’un objet se déroule toujours en trois étapes :


Récupérer l’objet à modifier (non présent ici).
Supprimer l’objet (ligne 2)
Mettre à jour la base de données (ligne 3)

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 110 / 111
Sommaire

9 Formulaires

David Annebicque (IUT de Troyes) M4D203D - POO Avancée @DavidAnnebicque 111 / 111

Vous aimerez peut-être aussi