Détails du sujet

Symfony 3 [Quiz 1] [Pile 5]

Contrôleurs, Twig, Templates dans le FrameWork Symfony 3

Toutes les cartes

Que doit respecter une méthode de contrôleur si elle est définie dans une route?

  • Respecter le nom de la méthode définie dans la route
  • Respecter le nom des arguments définis dans la route
  • Etre dans le scope "plublic"
  • Etre suffixée par "Action"

Pour utiliser une méthode dans un contrôleur qui n'est pas définie dans une route, doit-on suffixer la méthode par "Action"?

Non.

Ainsi on ne la confond pas avec les autres méthodes définies dans les routes.


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

Ces deux lignes sont-elles équivalentes?

  • return $this->redirectToRoute('nom_de_la_route')
  • return new RedirectResponse($this->generateUrl('nom_de_la_route')

Oui


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

Comment rediriger vers http://www.monsite.com

?

  • return $this->redirect('http://www.monsite.com')

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 hérite du contrôleur de base

Comment rediriger de manière permanente vers une URL en utilisant une route?

  • return $this->redirectToRoute('nom_de_la_route', array(), 301)

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

Citez 3 services de votre choix accessibles avec $this->get('nom_du_service')

  • router
  • templating
  • mailer

En ligne de commande

Comment connaître la liste de tous les services disponibles?

>php bin/console debug:container


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

Comment obtenir le paramètre 'from' du service 'mailer'?

$from = $this->getParameter('app.mailer.from')


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

Quelle méthode utiliser pour obtenir un paramètre d'un service?

getParameter()

$this->getParameter(app.nomService.nomParamètre)


Dans un contrôleur

Ces deux lignes font-elles la même chose?

  • throw new NotFoundHttpException('Erreur 404')
  • throw $this->createNotFoundException('Erreur 404')

Oui

Lancement d'une exception que le kernel transforme en page 404


Dans un template Twig

Quelle est la différence entre get() et peek()?

  • {% for message in app.session.flashbag.get('info') %}
  • {% for message in app.session.flashbag.peek('info') %}
  • get() récupère le message et vide le bag
  • peek() récupère le message mais ne vide pas le bag

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

Que fait cette ligne dans une méthode dont la signature est (Request $request)?

  • $request->files->get('paramètre')

 

On récupère une instance d'un fichier uploadé identifié par 'paramètre'


La classe Response de Symfony est-elle une abstraction autour de la réponse HTTP?

Oui


Dans un contrôleur

Quand la réponse est un fichier binaire quelle classe utiliser?

BinaryFileResponse

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

Comment envoyer un fichier et forcer le browser à le télécharger avec une méthode raccourcie?

A partir de Symfony 3.2
  • return $this->file('chemin_absolu/nom_du_fichier')

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

Quelle classe utiliser pour charger dans une variable un fichier de l'application?

La classe File
  • $unFichier = new File('chemin_absolu/nom_fichier')

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

Avec une méthode raccourcie, comment envoyer un fichier et forcer le browser à le télécharger tout en renomant le fichier?

  • return $this->file('chemin/nom_fichier_initial', 'nouveau_nom')

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

Avec une méthode raccourcie, comment envoyer un fichier et l'afficher dans le browser (au lieu de le télécharger) tout en renomant le fichier?

  • return $this->file('chemin/nom_fichier_initial', 'nouveau_nom', ResponseHeaderBag::DISPOSITION_INLINE )

Donnez un synonyme de Template

Une Vue


Pourquoi utiliser les templates?

Dans le cadre d'une architecture MVC

Pour séparer le code PHP (l'action) du code HTML (la présentation)


Pourquoi utilise-t-on un moteur de template Twig?

Car il nous permet de rendre notre page HTML

dynamique plus facilement qu'avec du PHP.

  • Syntaxe plus courte que du PHP
  • Permet l'héritage et l'inclusion de template
  • Permet l'inclusion de contrôleur
  • Sécurise nos variables automatiquement

Quelle est la différence entre une page HTML statique et dynamique?

  • Le contenu d'une page statique est fixe
  • Le contenu d'une page dynamique varie en fonction par exemple des données de localisation du client, des données de BDD etc...

Dans un template

Le language Twig sera-t-il transformer en PHP?

Oui


Que fait Twig afin de dimuner le temps de création d'une page?

A la première lecture d'une page il traduit la page du Twig en PHP et la met en CACHE.

Ainsi à la deuxième lecture la page est déja traduite en PHP et se charge plus vite; aussi vite qu'une page PHP.


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

Comment récupérer un template dans une variable avec une méthode raccourcie?

renderView()

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

  • B = Bundle
  • R = Répertoire du template
  • T = Template

 


Nos templates peuvent-ils contenir autre chose que du HTML?

Oui

  • Un texte: template.txt.twig
  • Un flux Rss: template.rss.twig

etc...

 


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

Comment envoyer un template par mail?

mail('adresse_email', 'object_du_mail', $contenu_du_template)

avec

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

  • B = Bundle
  • R = Répertoire du template
  • T = Template

 


Dans un Template Twig

Quelle ponctuation utiliser pour afficher quelquechose?

Les accolades

{{   }}


Dans un Template Twig

Quelle ponctuation utiliser pour contenir un commentaire?

Accolades et Croisillons

{#   #}


Dans un Template Twig

Quelle ponctuation utiliser pour contenir une action?

Accolades et Pourcentage

{%   %}


Quel est l'équivalent Twig de la ligne PHP suivante?

  • <?php echo $variable ?>

{{ variable }}


Quel est l'équivalent Twig de la ligne PHP suivante?

  • <?php echo $user['id'] ?>

{{ user['id'] }}

ou

{{ user.id }}


Afficher l'attribut d'un objet

Quel est l'équivalent Twig de la ligne PHP suivante?

  • <?php echo $user->getId() ?>

{{ user.id }}


Quel est l'équivalent Twig de la ligne PHP suivante?

  • <?php echo strtoupper($name) ?>

{{ name | upper }}


Quel est l'équivalent Twig de la ligne PHP suivante?

  • <?php echo ucwords(strip_tags($news->getTexte())) ?>

{{ news.texte | striptags | title }}

 

Le filtre striptags est appliqué en premier.


Quel est l'équivalent Twig de la ligne PHP suivante?

  • <?php echo $madate->format('d/m/Y') ?>

{{ madate | date('d/m/Y') }}

 

Notez que madate doit être une instance de Datetime


Concaténation

Quel est l'équivalent Twig de la ligne PHP suivante?

  • <?php echo $name . ' ' . $prenom ?>

{{ name ~ " " ~ prenom }}


Quelles sont les vérifications que Twig effectue avant d'afficher l'attribut?

{{ blog.message }}

  1. Vérifie si blog est un tableau ou un objet valide
  2. Vérifie si message est un index ou une méthode valide

Insérer des variables dans un template Twig

Qu'affiche la ligne suivante?

  • {{ "Bonjour %s Salut %s Hello %s" | format("Nathalie", "Johan", prenom)

Avec la variable $prenom définie à "Nicolas" dans le contrôleur

 

Bonjour Nathalie Salut Johan Hello Nicolas


Dans un template Twig

Comment retourner le nombre d'éléments d'un tableau?

{{ tableau | length }}


Dans un template Twig

Comment retourner le nombre de lettres d'un texte?

{{ texte | length }}


Citez quelques nom de filtres Twig

  • abs, batch, capitalize, convert_encoding
  • date, date_modify, default, escape
  • first, format, join, json_encode
  • keys, last, length, lower
  • merge, nl2br, number_format
  • raw, replace, rerverse, round
  • slice, sort, split, striptags
  • title, trim, upper, url_encode

Template Twig

Comment insérer des variables dans un texte?

Pour afficher 'Hello World'
  • Utiliser la variable %s (c'est un placeholder)
  • Affecter la valeur à la variable avec le filtre format
  1. {{ Hello %s | format("World")
  2. {{ Hello %s | format(mot) }}

Note: $mot = 'World' dans le contrôleur dans le cas 2.


Toutes les variables affichées par Twig dans nos templates sont-elles protégées?

Oui par défault Twig applique un filtre et toutes nos variables qui sont donc échappées.


Comment ne pas échapper une variable que l'on souhaite afficher dans un template Twig?

{{ variable | raw }}

On peut ainsi afficher du html (ou du JS) dans notre template:

{{ <p> hello </p> | raw }}


Quelle est la variable globale que Twig enregistre par défault?

{{ app }}


Quelle est la caractèristique de la variable globale Twig {{ app }} ?

Elle est accessible par défault dans tous les templates de l'application et possède de nombreux attributs:

  • {{ app.debug }}
  • {{ app.user }}
  • {{ app.request }}
  • {{ app.environment }}
  • {{ app.session }}

Notez l'acronyme "DURES" pour s'en souvenir

 


Comment définir une variable globale Twig?

  1. Défnir la variable globale et son paramètre dans app/config/config.yml
  2. Définir la valeur du paramètre dans app/config/parameters.yml
  3. Eviter de définir la valeur de la variable globale dans app/config/config.yml

Que faisons nous dans ces fichiers?
Best Practice
  •   On définit la variable globale Twig "webmaster" et son paramètre %webmaster-parameter% dans app/config/config.yml
  • On définit la valeur du paramètre %webmaster-parameter% à "jojo" dans app/config/parameters.yml

Peut-on être certifié Twig?

Oui une certification Twig est distribuée par SensioLabs