Services, DIC, Doctrine dans le FrameWork Symfony 3
Dans quel ordre doit-on utiliser les 3 arguments pour la signature du constructeur de la classe?
Le service, le paramètre, la variable.
Car on respecte l'ordre d'écriture des paramètres dans services.yml
Quels seront les attributs et le constructeur de la classe OCAntispam.php?
On injecte le service 'mailer' dans le constructeur de la classe
On parle d'Injection de dépendance
Quelle est l'utilité de l'injection de dépendance dans les services?
Cele permet à un service d'utiliser un service dont il aurait besoin pour fonctionner.
'mailer' est-il un alias?
Oui
C'est un pointer vers un service.
Le conteneur de service utilise l'alias 'mailer' qui pointe vers le service switfmailer.mailer.default
Si un jour on change de bibliothèque pour envoyer des courriers, on utilisera toujours le pointer 'mailer' dans les contrôleurs mais celui-ci pointera vers le nouveau service d'envoie d'email: 'SmtpClient' par exemple
Que faut-il garder en tête pour obtenir des contrôleurs lisibles et simples?
Utiliser les services dans les contrôleurs
Qui assure l'injection des dépendances pour un service qui aurait besoin pour fonctionner de variables, de paramètres ou de services?
Le Conteneur d'Injection de Dépendance.
Il sait qu'elles dépendances injecter dans le service grâce au fichier de configuration services.yml
Quel est l'ORM installé par défaut dans Symfony?
Doctrine 2
ORM = Object Relational Mapping
Qu'est-ce qu'une Entité pour Doctrine?
Une Classe avec des informations de mapping afin que Doctrine puisse l'enregistrer en base de données.
Quel terme emploit-on pour parler d'enregistrement d'une Entité dans la couche d'abstraction Doctrine?
Persister une entité
Qu'est ce qui permet à Doctrine de savoir qu'une classe est une Entité qui représente tel champ de telle table de base de données?
Les informations de mapping comme les annotations qui sont ajoutées dans la classe.
Quel fichier permet à Doctrine de savoir quelle base de données utiliser?
Le fichier app/config/parameters.yml
Quels sont les deux moyens que l'on possède pour créer une entité?
Quels sigles utiliser pour ajouter des informations de mapping en annotations DockBlocks?
Donnez un synonyme aux informations de mapping que l'on ajoute aux classes afin qu'elles deviennent des Entités.
Des métadonnées en Français
Metadata en Anglais
Que signifie "mapper" une classe?
C'est lui ajouter des informations de mapping (métadonnées) afin que Doctrine puisse faire le lien entre cette classe et la représentation physique en base de données.
Comment générer une entité pour la première fois?
>php bin/console doctrine:generate:entity
Le création d'une Entité en ligne de commande produit
Vrai
En plus de gérer nos données, le modèle peut-il aussi contenir de la logique pour notre application?
Oui
Que signifie Affiner une Entité avec de la Logique Métier?
On crée des méthodes dans l'Entité qui utilisent des attributs mappés afin d'en déduire une information.qui n'a pas besoin d'être mappée et persistée en base de données.
Exemple: déduire le prix total d'une commande
Quelle est l'annotation à mettre au dessus du nom de la classe afin que Doctrine la considère comme une entité?
Pourquoi utilse-t-on @ORM\Entity et pas @Entity?
Pour définir le namespace des annotations utilisées par Doctrine 2 afin de ne pas les confondre avec d'autres annotations qui utilisent un autre namespace.
Quelle différence entre l'annotation @ORM\Table(name="oc_advert") et la ligne 11?
On indique à Doctrine;
Quelle est l'utilité d'un repository?
Il permet de récupèrer le contenu de notre entité depuis la base de données
Quelle est l'annotation à mettre au dessus du nom de la classe afin d'indiquer à Doctrine le nom de la table en base de données?
Quelle est l'utilité de l'annotation "column"?
Afin de préciser à Doctrine
Les types déclarés dans les annotations des entités sont spécifiques à Doctrine
Le type Doctrine "decimal" correspond au type SQL "DECIMAL"
Notez que tous les types Doctrine sont écris en minuscules
Les entités sont-elles des services?
Non
Doctrine permet de persister entre 2 requêtes les datas dans une base de données.
Vrai
Quel est le rôle d'un ORM?
Il organise la persistance de nos données en base de données pendant que l'on manipule des objets
Comment créer notre table en base de données pour Doctrine?
>php bin/console doctrine:database:create
Comment créer nos tables aprés avoir créé notre base de données et nos entités Doctrine?
puis aprés avoir vérifié que la requête préparée est bonne
Quelle commande lancer pour créer les setters et les getters d'une entité Doctrine existante dont on a ajouté manuellement un attribut?
>php bin/console doctrine:generate:entities NomBundle:NomEntité
Quelle est la différence entre ces deux lignes de commande?
Aprés l'update d'une entité avec la ligne de commande suivante, peut-on revenire à l'entité précédente?
>php bin/console doctrine:generate:entities NomBundle:NomEntité
Oui
L'Entité précédente est sauvée dans le fichier
NomEntité.php~
Que faut-il faire aprés l'ajout ou la suppression d'une entité ou la modification des informations de mapping?
>php bin/console doctrine:schema:update --dump-sql
puis
>php bin/console doctrine:schema:update --force
Donnez deux manières de récupérer le service Doctrine
Quelles sont les deux parties de Doctrine?
Quel est l'intérêt de la partie DBAL de Doctrine.
La Data Base Abstraction Layer permet à Doctrine de fonctionner avec différents types de SGBD comme MySQL, PostgreSQL etc...
Comment récupérer le Gestionaire d'Entités que l'on appel en Anglais l'Entity Manager?
ou
Qui dans Doctrine se charge de persister nos Entités en base de données?
L'Entity Manager
Comment récupérer le répositorie d'une Entité?
Combien de Repository par Entité a-t-on?
1
Lorsque l'on récupère un Repository de la manière suivante, dans quel répertoire doit se trouvé l'Entité?
Dans le répertoire \Entity du Bundle
Dans un Contrôleur, quel code permet de sauver en mémoire une entité A avant de la sauvegarder en base de données?
Dans un Contrôleur, quel code permet de d'enregistrer en base de données une entité A?
Si l'on souhaite voir les requêtes effectuées par Doctrine, où doit-on regarder dans la barre d'outil Symfony?
Très utile pour vérifier la valeur des paramètres