Détails du sujet

Symfony 3 [Quiz 1] [Pile 3]

Paramétrage, Contrôleurs, Routes, URL, Vues, Templates dans le FrameWork Symfony 3

Toutes les cartes

Pourquoi faire hériter nos contrôleurs du contrôleur de base de Symfony?

  1. Pour utiliser les méthodes raccourcies comme $this->render(...)
  2. Pour appeler les services avec $this->get('nom_du_service')

Dans un contrôleur qui hérite du contrôleur de base

Comment appeler le service Twig?

$this->get('templating')


Dans un contrôleur qui hérite du contrôleur de base

Comment récupérer le contenu d'un template avec $this->get(...)?

$this->get('templating')->render('B:R:T')

 

  • B est le nom du Bundle
  • R est le nom du répertoire qui contient le template
  • T est le nom du template

En mode production, Symfony regénére-t-il le cache?

Non, jamais.


En mode développement, Symfony regénére-t-il le cache?

Oui, mais seulement une partie.


Comment vider le cache du mode production?

  • >php bin/console cache:clear --env=prod

ou

  • Effacer le contenu du répertoire var\cache\prod

Comment vider le cache du mode développement?

  • >php bin/console cache:clear

ou

  •  Effacer le contenu du répertoire var\cache\dev


Quand on modifie le code de son site et que l'on envoie les modifications sur le serveur de production, quel cache faut-il penser à vider?

Le cache du mode production.


Quels sont les deux éléments qui composent au minimum une route?

  • L'Url à faire correspondre
  • Le contrôleur à exécuter

Le routeur analyse-t-il dans l'ordre ou le désordre les routes contenues dans le fichier de configuration?

Dans l'ordre


Dans config.yml d'un Bundle

Comment ajouter un paramètre à une URL?

Entre accolades

{paramètre}


Dans config.yml d'un Bundle

Comment ajouter des contraintes aux paramètres des URL?

En ajoutant des Expressions Regulières (Regex) dans la section "requirements"


Quel service peut générer des URL?

Le Routeur


De quoi a besoin le routeur pour générer une URL?

  • Du nom de la route
  • Des paramètres éventuels

Qui réalise l'URL rewriting dans Symfony?

Le Routeur.

Il le fait du côté PHP afin que le résultat soit bien mieux intégré au code.


Commentez chaque ligne
  • Ligne1: Commentaire qui indique le nom du fichier
  • Ligne 3: Nom de la route
  • Ligne 4: URL constituée de 3 paramètres
  • Ligne 5: Définition des paramètres par défaut
  • Ligne 6: Définition du Bundle, Contrôleur et Méthode
  • Ligne 7: 'format' vaudra 'html' par défaut
  • Ligne 8: Définition des contraintes
  • Ligne 9: Le paramètre 'year' doit être de 4 chiffres
  • Ligne 10: Le paramètre 'format' accèpte 'html' ou 'xml'

Que se passe-t-il si le Routeur ne trouve aucune route pour une URL?

Le Kernel déclenche une erreur 404


Quel onglet de la barre d'outils de Symfony faut-il choisir pour voir les routes parcourues une à une par le Routeur?

L'onglet 'Routing'


Quels chemins et fichiers atteindent:

le Bundle, le Contrôleur et le Template?

  • Le Bundle: src\OC\PlateformBundle
  • Le Contrôleur: src\OC\PlateformBundle\Controller\AdvertController.php
  • Le Template: src\OC\PlateformBundle\Resources\views\Advert\index.html.twig

Dans config.yml d'un Bundle

Le nom de la route aide-t-il le Routeur à trouver le bon contrôleur?

Non


Dans config.yml d'un Bundle

Le nom de la route aide-t-il le Routeur à générer des URL?

Oui


Où peut-on générer des URL?

  • Dans les templates
  • Dans les contrôleurs

En ligne 4

L'URL qui lance le contrôleur est-elle relative ou absolue?

Absolue

exemple: http://www.monsite.com/platform


Quel est le nom de la route?

oc_platform_view_slug


Les paramètres une fois définis sans contrainte dans une route sont-ils par défaut obligatoires ou facultatifs?

Obligatoires


Dans le fichier routing.yml

Par quelles ponctuations sépare-t-on les paramètres de l'url?

Le point . ou le slash /

{year} vaut-il 4 par défaut?

Non

Le paramètre {year} doit comporter 4 chiffres.


Routing

Faut-il respecter l'ordre des variables définie dans une URL l'orsqu'on les utilise dans la signature de la méthode du contrôleur?

Non


Routing

Qu'est-ce qu'un paramètre système d'une URL?

C'est un paramètre qui s'utilise comme les autres mais le Kernel de Symfony effectue automatiquement des actions supplémentaires l'orsqu'il le détecte.

Son nom commence par un underscore


Routing

Dans une URL le paramètre _controller est-il un paramètre système?

Oui


Routing

Expliquez le paramètre système _locale que l'on peut utiliser dans une URL?

il définit la langue dans laquelle le client souhaite la page.

Si l'on définit plusieurs langues pour une page se sera la page dont la langue est définie par _locale qui sera chargée.

Ne pas oublier de définir les 'requirements' afin d'établir les langues disponibles.


Routing

Expliquez le paramètre système _format que l'on peut trouver dans une URL

Permet au Kernel de savoir quel format est retourné par le contrôleur.

Ainsi le bon content-type est utilisé dans le header de la réponse

  • Content-type: txt/html si _format est défine à html
  • Content-type: txt/xml si _format est définie à xml

Routing

A quel moment peut-on ajouter un préfixe d'URL afin d'éviter d'écrire le même préfixe pour toutes les URL d'un Bundle?

Dans app/config/routing.yml

Lors de l'import du fichier routing.yml du Bundle.


Dans un contrôleur qui hérite du contrôleur de base

 Quels sont les deux manières de générer une URL relative?

  • $this->get('router')->generate('nom_de_la_route')
  • $this->generateUrl('nom_de_la_route')

Dans un contrôleur qui hérite du contrôleur de base

L'URL créée avec les deux méthodes suivantes sera-t-elle relative ou absolue?

  • $this->get('router')->generate('nom_de_la_route')
  • $this->generateUrl('nom_de_la_route')

Relative


Dans un contrôleur qui hérite du contrôleur de base

Que doit-on ajouter aux lignes suivantes pour créer une URL absolue?

  • $this->get('router')->generate('nom_de_la_route', array())
  • $this->generateUrl('nom_de_la_route', array())
UrlGeneratorInterface::ABSOLUTE_URL
  • $this->get('router')->generate('nom_de_la_route', array(), UrlGeneratorInterface::ABSOLUTE_URL)
  • $this->generateUrl('nom_de_la_route', array(), UrlGeneratorInterface::ABSOLUTE_URL)

Routing

Pourquoi faut-il éviter d'utiliser le point dans le contenu d'un paramètre d'URL?

Afin d'éviter de couper le paramètre de part et d'autre du point car le point sépare les paramètres d'une URL.


Dans un contrôleur qui hérite du contrôleur de base

Comment générer l'URL relative /platform/5 si la route est la suivante?

Au choix
  • $this->get('router')->generate('OC_platform_view', array('id' => 5))
  • $this->generateUrl('OC_platform_view', array('id' => 5))

Dans un template

Comment générer l'URL relative /platform/5 si la route est la suivante?

Fonction Twig path()

Dans un template

Comment générer l'URL absolue http://www.monsite.com/platform/5 avec la route:

Fonction Twig url()

Au lieu d'utiliser un fichier de configuration comme routing.yml pour définir nos routes de Bundle, est-il possible d'utiliser les annotations au dessus de nos méthodes de contrôleur?

Oui


Quel est le devoir ultime d'un contrôleur?

Retourner une réponse.


Quelles sont les 2 manières que l'on a pour définir nos routes?

  1. Dans les annotations des Actions de contrôleur
  2. Dans un fichier de configuration en YAML, XML ou PHP

 


Avec le fichier app/config/routing.yml suivant

Quelle annotation faut-il écrire pour une action de contrôleur qui affichera 'hello' pour l'url /hello

Pour htpp://www.monsite.com/hello

Si par mégarde deux routes correspondent à une même URL, une erreur se déclenche-t-elle?

Non, la première route trouvée par le routeur est utilisée

 


Commentez la ligne 10
Route définie en annotation
  • L'URL qui déclenche cette méthode est /blog/{page}
  • blog_list est le nom de la route
  • le paramètre page doit au moins être un chiffre

Le paramètre {page}

Peut-il être égale à toto?

Non

Le paramètre {page} est un chiffre


Une Route est-ce comme une carte qui nous guide de L'URL vers un contrôleur?

Oui


Routing

Dés qu'on définit un {paramètre} pour une URL, est-il facultatif?

Non, on doit lui donner une valeur.


Commentez le $page = 1 de la ligne 12

Le paramètre {page} de l'URL vaut maintenant 1 par défaut.

Cette valeur sera écrasée par la celle présente dans l'URL du client.