Détails du sujet

Symfony 3 [Quiz 1] [Pile 4]

Routes, Contrôleurs dans le FrameWork Symfony 3

Toutes les cartes

Dans une Route

Le paramètre spécial _format permet-il au contrôleur de fournir un même contenu dans différents formats?

Oui. HTLM, XML, JSON, RSS etc...

  • La valeur du format devient celle de l'objet Request.
  • Permet de choisir le Content-Type de la réponse.
  • Permet au contrôleur de rendre un template dans un certain format.

Dans une Route

Par défaut que vaut le paramètre spécial _locale?

 'en'

Pour English


Dans une Route

Que doit-on respecter pour définir le nom d'un paramètre de route?

{nom_du_paramètre}

Le nom du paramètre doit

  • Ne pas commencer par un nombre
  • Ne pas dépasser 32 caractères

Dans une Route

Quelle est l'utilité du paramère spécial _fragment?

A partir de la version 3.2

Définit la dernière partie d'une URL, celle qui commence par # et permet d'atteindre une partie d'un document.


Quelles sont les 3 manières d'appeler un contrôleur?

  1. Avec son nom logique
  2. Avec son FQCN (Fully Qualified Class Name)
  3. On l'utilise comme un service aprés l'avoir définit comme un service

Peut-on configurer nos routes avec les annotations et les fichiers de configuration de route en même temps?

Oui


Pourquoi dit-on que le sytème de Routing est bidirectionnel?

Car il nous permet d'aller

  • D'Une URL vers un Contrôleur
  • D'Une Route vers une URL

 


Lors de la génération d'URL

Que se passe-t-il si on ajoute un paramètre avec sa valeur, en plus de ceux définis dans la route?

On génére alors une URL avec un paramètre de requête.

http://www.monsite.com/?paramètre=valeur


Lors de la génération d'URL absolue dans un contrôleur, quelle interface et constante doit-on utiliser?

UrlGeneratorInterface::ABSOLUTE_URL

  • L'interface UrlGeneratorInterface
  • La constante ABSOLUTE_URL

Dans un contrôleur

Qui ajoute la valeur de la requête dans la signature suivante?

  • public function IndexAction (Request $request) {...}

C'est le Kernel qui donne la valeur de la requête avant de lancer l'action de contrôleur que le routeur lui a désigné.


Les deux classes Request et Response existent-elles dans Symfony?

Oui


Quels sont les 3 éléments qui permettent de construire une réponse?

  1. L'Objet Request
  2. L'Objet Response
  3. Les Services

Dans le navigateur Web où peut-on voir l'entête HTTP de la Requête et de la Réponse?

  • Cliquez droit sur la page
  • Sélectionner 'Inspecter l'élément'
  • Aller dans l'onglet 'Réseau'

La signature d'une méthode de contrôleur nous permet-elle de récupérer les paramètres d'une route?

Oui, la variable $id ci-dessous a été définie dans la route et peut être utilisée dans la méthode indexAction.

  • public function indexAction($id) {...}

Qu'est ce qu'une action de contrôleur?

C'est une fonction PHP que l'on crée qui lie les informations venant d'un objet Request de Symfony et qui crée et retourne un objet Response.


Quelle genre de Réponse un contrôleur peut-il renvoyer?

  • Une page HTML, XML ou JSON
  • Un fichier à télécharger
  • Une redirection
  • Une erreur 404
  • Tout ce que l'on souhaite

En général une action de contrôleur est une méthode à l'intèrieur d'une classe contrôleur, mais que peut-elle être aussi?

  • Une fonction
  • Une méthode d'objet
  • Une closure

Dans les contrôleurs

Les méthodes fondamentales de Symfony appellées CORE METHODES en Anglais, sont-elles disponibles?

Oui

Que le contrôleur étende ou pas le contrôleur de base de Symfony.


Dans les contrôleurs

Que faut-il faire pour pouvoir accéder aux méthodes raccourcies que l'on appèlle SHORTCUT METHODS en Anglais?

Le contrôleur doit étendre le contrôleur de base de Symfony.


Dans un contrôleur qui étend le contrôleur de base

Comment récupérer le paramètre hors route tag?

  • http://monsite.com/?tag=hello
  1. Ajouter dans la signature (Request $request)
  2. $tag = $request->query->get('tag')

Dans un contrôleur qui étend le contrôleur de base

Comment récupérer les paramètres d'une URL passés en GET?

  1. Ajouter dans la signature (Request $request)
  2. $request->query->get('nom_du_paramètre')

Dans un contrôleur qui étend le contrôleur de base

Comment récupérer les paramètres d'une URL passés en POST?

  • Définir dans la signature (Request $request)
  • $request->request->get('nom_du_paramètre')

Dans un contrôleur qui étend le contrôleur de base

Comment récupérer les variables de cookie?

  1. Ajouter dans la signature (Request $request)
  2. $request->cookies->get('nom_de_la_variable')

Dans un contrôleur qui étend le contrôleur de base

Comment récupérer les variables de serveur?

  1. Ajouter dans la signature (Request $request)
  2. $request->server->get('REQUEST_URI')

Dans un contrôleur qui étend le contrôleur de base

Comment récupérer les variables d'en-tête?

  1. Ajouter dans la signature (Request $request)
  2. $request->headers->get('USER_AGENT')

Dans un contrôleur qui étend le contrôleur de base

On récupère normalement un paramètre de route dans la signature de la méthode.Mais comment peut-on le récupèrer avec une instance de l'objet Request?

  1. Ajouter dans la signature (Request $request)
  2. $request->attributes->get('nom_du_paramètre')

Si on utilise les méthodes suivantes d'une instance de l'objet Request, doit-on tester l'existence des paramètres?

  • $request->query
  • $request->request
  • $request->cookies
  • $request->server
  • $request->header
  • $request->attributes

 

Non

Si les paramètres ne sont pas définis cela retournera une chaine vide.


Dans un contrôleur qui étend le contrôleur de base

Comment savoir si la requête à été envoyée en GET ou POST?

  1. Ajouter dans la signature (Request $request)
  2. $request->isMethod('GET')
  3. $request->isMethod('POST')

Comment s'appel en Français et en Anglais la partie 'Request' de la signature suivante?

  •   public function indexController(Request $request)
  1. Le Typage Explicite en Fançais
  2. Le Typehint en Anglais

Dans un contrôleur qui étend le contrôleur de base

Comment savoir si la requête envoyée est une requête AJAX?

  1. Ajouter dans la signature (Request $request)
  2. $request->isXmlHttpRequest()

Dans un contrôleur qui étend le contrôleur de base

Quelle est la méthode raccourcie pour renvoyer une réponse avec vue?

$this->render('B:R:T', array('paramètre' => 'valeur'))

  • B = Bundle
  • R = Répertoire qui contient le template (vue)
  • T = Template

Dans un contrôleur qui étend le contrôleur de base

Comment renvoyer une réponse avec vue en utilisant le service templating?

$this->get('templating')->renderResponse('B:R:T', array('paramètre' => 'valeur')

  • B = Bundle
  • R = Répertoire qui contient le template (vue)
  • T = Template

Utilisation des 'core' méthodes

Comment créer, constituer et envoyer une réponse avec une instance de Response?

  1. $response = new Response
  2. $response->setContent('contenu_de_notre_réponse')
  3. $response->setStatusCode('status_code_souhaité')
  4. return $response

Dans un contrôleur

Une redirection est-ce une réponse HTTP?

Oui


Dans un contrôleur

Quelle est l'utilité de la classe RedirectResponse?

Pour retourner une redirection d'URL
  • return new RedirectResponse($url)

La classe RedirectResponse étend Response et ajoute l'entête HTTP Location pour informer le navigateur qu'il sagit d'une redirection.

 


Dans un contrôleur qui étend le contrôleur de base

Comment rediriger avec une méthode raccourcie qui utilise une URL en argument?

  • return $this->redirect($url)

ATTENTION: il n'y a pas de validation d'URL dans ce cas et l'application devient vunérable aux attaques de redirection d'URL non validée.


Dans un contrôleur qui étend le contrôleur de base

Comment rediriger avec une méthode raccourcie qui utilise une Route en argument?

  • return $this->redirectToRoute('nom_de_la_route', array('paramètre' => 'valeur'))

En mode développeur

Que faut-il changer dans le fichier app/config/config_dev.yml pour pourvoir intercepter les redirections?

Mettre

intercept_redirect

à true


Pourquoi intercepter une redirection avec Symfony?

Aide à déboguer

Pour connaître, par exemple, la valeur des données récupérées par nos requêtes SQL avant d'aller vers la redirection.


Dans un contrôleur qui étend le contrôleur de base

Quelle méthode raccourcie utiliser pour retourner simplement un contenu en JSON?

return $this->json(Contenu A Transformer En JSON)


Dans un contrôleur

Quelle classe instancier pour retourner un contenu en JSON?

JsonResponse
  • return new JsonResponse(contenu A transformer En JSON)

'Content-Type' est mis à 'application/json' automatiquement


Dans un contrôleur

Complétez la ligne 2

  1. $response = new Response(json_encode(array('id'=>'5')))
  2. $response->
  3. return $response

L'Entête doit être fixé car le contenu retourné est du JSON

  • 2. $response->hearders->set('Content-Type', 'application/json')

Dans un contrôleur qui étend le contrôleur de base
  1. Comment récupérer une session
  2. Récupérer la variable user_id
  3. Fixer la variable user_id à 785

La session s'obtient à partir de la requête, il faut donc ajouter dans la signature (Request $request)

  1. $session = $request->getSession()
  2. $userId = $session->get('user_id')
  3. $session->set('user_id', 785)

Dans le Profiler

Comment connaître les variables de la session courante?

  1. Cliquer sur l'onglet de gauche [Request/Response]
  2. Cliquer sur l'onglet [Session]

Comment s'appelle les messages qui sont définis dans des variables de session et qui ne durent que le temps de la page?

Les messages flash


Dans un contrôleur qui étend le contrôleur de base

Comment ajouter un message flash 'hello' dans une variable de session 'message'?

Ajouter dans la signature (Request $request)
  • $request->getSession()->getFlashBag()->add('message', 'hello')

ou avec une méthode raccourcie

  • $this->addFlash('message', 'hello')

 


Dans un template Twig

Comment afficher un message flash que l'on à définit dans notre contrôleur dans la variable de session 'error'?

flashMessage peut-être remplacé par n'importe quel autre mot


Sur quelle touche de clavier appuyer pour faire disparaître un message flash?

F5


La variable globale Twig {{ app }} est-elle disponible partout dans nos templates?

Oui


Dans un contrôleur qui hérite de NotFoundHttpException, comment déclencher une exception qui affichera une page d'erreur 404 'Not Found'

  • throw new NotFoundHttpException('mon_message')

Le kernel attrape l'exception lancée et contruit une page d'erreur 404