# PWS3 - Résumé/Compte rendu
[TOC]
```
composer create-project symfony/website-skeleton nom_projet
cd nom_projet
composer update
composer require symfony/web-server-bundle --dev
php bin/console server:start 0.0.0.0:8000
composer require --dev symfony/profiler-pack
-- Mettre à jour le fichier .env
php bin/console doctrine:database:create
php bin/console doctrine:fixtures:load
```
DATABASE_URL=mysql://root:mysql@localhost:3306/testproj


## Docker
```
docker run -it --rm --name devbox -v '/Users/local/Documents/www:/var/www/html/www' -p 9998:8000 -p 9999:80 registry.univ-lr.fr:81/iutlr-info/devbox
docker exec -it devbox bash
```
## Démarrer
```
php bin/console server:start 0.0.0.0:8000
```
## Routage
Le routage est effectué grâce à des annotation spécifiées avant la fonction qui sera exécutée quand la route sera reconnue.
Pour afficher les routes dans le terminal, il suffit de saisir `php bin/console debug:router`
> 
> *Exemple de routes dans le contrôleur `EvenementController.php`*
Les routes peuvent aussi contenir des paramètres, comme `id` dans l'exemple ci-dessus (1$^{ère}$ annotation. Ce paramètre pourra être récupéré dans la fonction et ainsi pouvoir être envoyé dans la vue. Pour ajouter une valeur par défaut à un paramètre, on ajoute `defaults={"nom_du_param"="valeur_par_defaut"}` (2$^{ème}$ ligne).
Chaque route peut être nommée en ajoutant `name="un_nom_de_route"`.
## Contrôleur
Comme son nom l'indique, le contrôleur va permettre de contrôler le routage, de faire des requêtes vers la base de données ou encore d'envoyer des variables au moteur de template TWIG. Il permet donc la liaison entre la partie modèle et la partie vue du modèle MVC.
Pour créer un contrôleur, il faut exécuter la commande `php bin/console make:controller` et suivre les instructions qui apparaissent dans le terminal.
## Vue
La vue concerne les pages web qu'on va retrouver sur le site. Elle va être associée à un contrôleur qui peut lui transmettre des données comme par exemple des données d'une base de données. La vu est un fichier html mais aussi twig, ce dernier est un moteur de template qui a pour objectif de séparer les code HTML du code PHP.
- `{{ var }}` : affiche le contenu de la variable `var`
- `{%..%}` : fait quelque chose (exemple avec la boucle for ci-dessous)
- `{#..#}` : syntaxe pour les commentaires
Grâce à ce moteur de template on va pouvoir récupérer les variables que le contrôleur nous envoie :
>
> *Extrait du contrôleur membre*
Ce morceau de code créé la variable membre qui contient la variable repository qui récupère les données de la table Membre en lui spécifiant le chemin où est situé cette Table. Puis le return, en spécifiant le chemin de la vue, envoie à la vue le nom contôleur et le variable membre.
> 
> *Boucle permettant de créer les lignes d'un tableau en fonction de la liste des membres et des caractéristiques de ces derniers*
Grâce au contrôleur qui nous envoie la variable membre et le moteur de template twig, on peut afficher sur notre page le contenue de la table Membre sur notre page web.
## Base de données
### Création d'une entité
```bash
# Ajout de la relation
php bin/console make:entity
# Permet de vérifier les commandes qui seront envoyées à la base SQL
php bin/console doctrine:schema:update --dump-sql
# Permet d'envoyer les commandes à la base SQL
php bin/console doctrine:schema:update --force
# Permet de régénérer les accesseurs des entités
php bin/console make:entity --regenerate
```
### Créer la base de données
`mysql -p -e "create database jeuxdicode"`
### Requête SQL (SELECT)
```php
$repository = $this->getDoctrine()->getManager()
->getRepository('App\Entity\Evenement');
$evt = $repository->findAll();
```
> Requête SQL retournant un tableau avec les évènements.