Symfony

Structure

L'architecture MVC

L'architecture MVC de Symfony peu être représentée de cette façon :

Lorsqu'un client demande une URL, celle-ci est d'abord traitée par le controleur fontrale de Symfony avant d'être envoyée au noyaux.
Quand le noyaux reçois la demande d'une URL, il appel le service de routing, celui-ci va alors lui indiquer le contrôleur à appeler pour l'URL que le client demande.
Le noyaux appel alors le contrôleur qui va si il en a besoin, appeler le modèle et générer la vue.
Quand le contrôleur a fini que générer la vue, il retourne le résultat au noyaux, celui-ci va alors transmettre la réponse au client.

Les ORM

ORM signifie Object Relational Mapping. Il permet de créer l'illusion d'une base de données orientée objet à partir d'une base de données relationnelle, en transformant l'ensemble des relations en objet.
Il existe deux types d'ORM :

Data mapped Active record
$user = new User;
$user->setName('Antoine');
EntityManager::persist($user);
$user = new User;
$user->setName('Antoine');
$user->save();

Doctrine permet d'avoir une abstraction plus forte avec la base de données afin d'éviter les problèmes de couplage fort. Cependant cette abstraction a un prix sur ses performances, en effet le manager d'entité est lourd comparé au patterns active record qui contient le code de persistance directement de la classe concernée. Le pattern active record est très intéressant dans le cas d'une structure CRUD.

Voici un exemple de requêtes Doctrine :

$this->getUserRepository()
           ->createQueryBuilder('u')
           ->select('u, p')
           ->leftJoin('u.profile', 'p')
           ->where('u.login = :login')
           ->setParameter('login', 'b.rossi')
           ->getQuery();

Doctrine génère alors le code SQL suivant :

SELECT * FROM  user u LEFT JOIN lnk_user_profile lup ON u.id = lup.user_id LEFT JOIN profile p ON lup.profile_id = p.id WHERE u.login = 'b.rossi';

L'arborescence

L'arborescence d'un projet Symfony est la suivante :

			.
			├── app
			│   ├── config (Contient la configuration générale de l’application Symfony : Connexion à la base de donnée, Routing général, Configuration de la sécurité et du firewall, Configuration générale (mail, ORM…))
			│   └── Resources (Contient les ressources générales de l’application Symfony : Les fichiers de traduction, La vue de base)
			├── bin (Contient l’executable Symfony et Doctrine)
			├── src (Contient les bundles de chaque projet)
			│   └── Dms
			│       ├── ClaimBundle
			│       ├── CoreBundle
			│       └── PlanningBundle
			├── var (Contient les fichiers de cache et les fichiers de log)
			│   ├── cache
			│   └── logs
			├── vendor (Contient les librairies utilisées dans Symfony)
			│   ├── composer
			│   ├── doctrine
			│   ├── swiftmailer
			│   ├── symfony
			│   └── twig
			└── web (Contient les fichiers js / css / images pour chaque bundle (une fois généré))
			    └── bundles
         ├── dmsclaim          ├── dmscore    └── dmsplanning