Détails du sujet

Symfony 3 [Quiz 2] [Pile 1]

Twig, Contrôleur, Dépendances, Composer, CLI dans le FrameWork Symfony 3

Toutes les cartes

Ecrire une condition Twig équivalente à
  • {% if age > 100 %}
  • Vous êtes chanceux
  • {% endif %}

Qu'avons nous ci-dessous?
  • {% if age > 100 %}
  • Vous êtes chanceux
  • {% elseif age > 200 %}
  • Etes-vous immortel?
  • {% else %}
  • Vous êtes normal
  • {% endif %}

Une structure de contrôle if dans un template Twig


Quel est l'équivalent Twig du code suivant:
  • <ul>
  • {% for membre in liste_membres %}
  • <li>{{ membre.pseuso }} </li>
  • {% else %}
  • <li>pas d'utilisateur trouvé</li>
  • {% endif %}
  • </ul>

Quel est l'équivalent Twig du code suivant:
  • {% for valeur,option in liste_options %}
  • ...
  • {% endfor %}

Twig

Citez quelques attributs que la variable {{ loop }} contient dans une structure itérative {% for ... %} ?

  • {{ loop.index }}
  • {{ loop.index0 }}
  • {{ loop.revindex }}
  • {{ loop.revindex0 }}
  • {{ loop.first }}
  • {{ loop.last }}
  • {{ loop.length }}

 

Que représente cette variable Twig?

{{ loop.index }}

Le numéro de l'itération courante en commençant par 1


Que représente cette variable Twig?
{{ loop.index0 }}

Le numéro de l'itération courante en commençant par 0


Que représente cette variable Twig?
{{ loop.revindex }}

Le nombre d'itérations restant avant la fin de la boucle, qui finit par 1


Que représente cette variable Twig?
{{ loop.revindex0 }}

Le nombre d'itérations restant avant la fin de la boucle, qui finit par 0


 Que représente cette variable Twig?

{{ loop.first }}

True si c'est la première itération, sinon False.


 Que représente cette variable Twig?

{{ loop.last }}

True si c'est la dernière itération, sinon False.


 Que représente cette variable Twig?

{{ loop.length }}

Le nombre total d'itération dans la boucle


Dans un template Twig

Comment affecter la valeur 456 à la variable"nombre"?

{% set nombre = 456 %}


Dans un template Twig

Comment vérifier qu'une variable "message" est définie avant de l'afficher?

  • {% if message is defined %}
  • {{ message }}
  • {% endif %}

Dans un template Twig

Comment vérifier qu'une variable "nombre" est pair ou impair?

  • {% if nombre is even %} ... {% endif %}

et

  • {% if nombre is odd %} ... {% endif %}

Quel est le principal avantage de l'héritage de template Twig?

Cela évite la répétition de code dans différents templates.


Héritage de template Twig

Comment faire pour qu'un template père contienne un template fils?

{% block title %} Home {% endblock %}

On nomme un block ("title" par exemple) avec une valeur facultative ("Home" par exemple) dans le template père pour que le template fils puisse le remplir et utiliser son contenu (s'il a été défini).


Twig

Pourquoi nommer un block?

{% block title %} Home {% endblock %}

Le nommage de block permet au template fils de le modifier indépendamment des autres blocks.


Twig

Dans ce Template père, quel est l'utilité du contenu facultatif 'Home'

{% block title %} Home {% endblock %}

  1. Pour afficher 'Home' si le template fils ne redéfinit pas le block père
  2. Pour que le template fils puisse utiliser 'Home' en l'appelant avec {{ parent() }}

Commentez ce Template Twig Père
  • Création d'un block "title" avec une valeur par défaut "OC Platforme"
  • Création d'un block "body" vide
  • Ces deux blocks pourront être remplis ou complétés par un template fils

Que doit faire un template fils pour pouvoir

  1. Compléter un block père?
  2. Remplir un block père?

Hériter du template père avec  extends (Ligne 3)

  1. Compléter le block père avec {{ parent() }} (Ligne 5)
  2. Remplir le block père sans {{ parent() }} (Ligne 7)

Que fait {{ parent() }} ?

{{ parent() }} permet au template fils d'utiliser le contenu du block père "title"


Twig

Comment un template fils pourra-t-il hériter d'un template père "layout.html.twig" situé dans app\Resources\views?

{% extends "::layout.html.twig" %}


Twig

Comment un template fils pourra-t-il hériter d'un template père "forum.html.twig" situé dans ForumBundle/Resources/views du vendor MK?

{% extends "MKForumBundle::forum.html.twig" %}


Twig, Vendor MK

Dans quel répertoire est situé le template père pour que le fils puisse en hériter avec:

{% extends "MKForumBundle::forum.html.twig" %}

Dans le répertoire du Bundle:

MK/ForumBundle/Resources/views/


Twig

Dans quel répertoire est situé le template père pour que le fils puisse en hériter avec:

{% extends "::layout.html.twig" %}

Dans le répertoire de l'application:

app/Resources/views


Twig, Vendor MK

Dans quel répertoire est situé le template père pour que le fils puisse en hériter avec:

{% extends "MKForumBundle::Posts/general.html.twig" %}

Dans le répertoire du Bundle

MK/ForumBundle/Resources/views/Posts


Twig

Quels sont les 3 templates qui constituent le "Triple Héritage"?

  • Le Layout Général:Template père qui contient le header, le footer etc...
  • Le Layout du Bundle:il hérite du Layout Général pour le remplir avec les parties communes à toutes les pages du Bundle
  • Le Template de page:il hérite du Layout du Bundle pour le remplir avec le contenu de la page

 


Que Représente cette photo?
Le triple héritage Twig
  • [En Bleu] layout.html.twig est le Layout Général père de l'application située dans app/Resources/views
  • [En Orange] layout.html.twig est le Layout de Bundle qui hérite du Layout Général pour le remplir. Il est situé dans le Bundle à OC/PlatformBundle/Resources/views
  • [En Vert] index.html.twig est le Template de Page qui hérite du Layout du Bundle pour le remplir. Il est situé dans le Bundle à OC/PlatformBundle/Resources/views/Advert

Twig

Quelle la différence entre:

  • {% extends "..." %}
  • {{ include("...") }}
  • {{ render(controller("...")) }}
  • extends permet l'héritage de template
  • include permet l'inclusion de template
  • render(controller... permet l'inclusion de contrôleur

Twig

Dans l'héritage de template quelle est la différence entre:

  1. {% extends "::C.html.twig" %}
  2. {% extends ":B:C.html.twig" %}
  3. {% extends "A:B:C.html.twig" %}
  1. Le template C est dans le répertoire de l'application: app/Resources/views
  2. Le template C est dans le répertoire B de l'application app/Resources/views/B
  3. Le template C est dans le répertoire B du Bundle A: A/Resources/views/B

Dans un fichier config.yml

Utilise-t-on : ou :: pour définir une route?

Les deux points :


Comment inclure dans un template Twig un autre template venant d'un répertoire de Bundle?

{{ include("B:R:T") }}

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

Twig

Dans quel cas préférer l'inclusion de template plutôt que l'héritage?

  • Si l'on souhaite que notre template n'hérite de rien pour l'afficher dans un pop-up par exemple
  • Si le template doit se retrouver dans au moins deux templates différents rendant l'héritage impossible puisqu'il ne peut pas hériter deux fois. Le double héritage de template est impossible.

Twig

A l'intèrieur d'un template inclus, retrouve-t-on toutes les variables qui sont disponibles dans le template qui fait l'inclusion?

Oui


Twig

Pourquoi dans certains cas au lien d'inclure un template A dans un autre template on préfère inclure un contrôleur?

Dans le cas où le template père n'a pas les variables nécessaires au template fils A.


Twig

Comment inclure un contrôleur (qui n'a pas de paramètre) dans un template?

{{ render(controller("B:C:A")) }}

  • B = Bundle
  • C = Contrôleur
  • A = Action du Contrôleur

Twig

Quel est le principal inconvénient de l'inclusion de contrôleur dans un template?

A utiliser avec modération!

On y perd en terme de performance car Symfony doit lancer une requête pour récupèrer les variables utilisées dans le template.


Comment inclure un contrôleur (qui a un paramètre) dans un template?

{{ render(controller("B:C:A"), {'P': V) }}

  • B = Bundle
  • C = Contrôleur
  • A = Action du Contrôleur
  • P = Paramètre
  • V = Valeur du Paramètre

Comment appelle-t-on les signes suivants?

  1. (   )
  2. <   >
  3. {   }
  4. [   ]
  5. "
  6. '
  1. Parenthèses (  )
  2. Chevrons <  >
  3. Accolades {  }
  4. Crochets [  ]
  5. Guillemet "
  6. Apostrophe '

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

Quelle est la différence entre

  1. $this->render(...
  1. $this->renderView(...
  1. $this->render(... retourne un template dans un objet Response
  2. $this->renderView(... retourne un template

Quel est le nom du micro-framework basé sur Symfony?

Silex


Qu'est-ce que composer?

C'est un outils qui permet de gérer les dépendances d'un projet PHP qu'il soit sous Symfony ou non.


Qu'est-ce que les dépendances d'un projet?

Citez quelques dépendances de Symfony.

Ce sont les bibiiothèques dont le projet a besoin pour fonctionner.

  1. SwifMailer
  2. Twig
  3. Doctrine

Que veut dire  'Composer gère les dépendances d'un projet'?

Composer

  1. Installe les librairies d'un projet
  2. Update les librairies d'un projet
  3. Update les librairies des librairies
  4. Gère les paramètres d'Autoload des librairies

Sur quel site internet Composer trouve-t-il les dernières mises à jour des librairies?

https://packagist.org


Symfony, est-ce une bibiiothèque que l'on trouve sur packagist.org et que l'on peut installer et updater avec Composer?

Oui


Sur packagist.org quelle section va permetre à Composer de savoir si la bibliothèque qu'il doit télécharger ou updater possède elle même des dépendances?

La section Requires de la librairie indique si la bibliothèque a besoin d'autres bibliothèques pour fonctionner.


Quels sont les deux paramètres dont Composer a besoin pour updater une bibliothèque?

  1. Le nom de la bibliothèque
  2. La version de la bibliothèque que l'on souhaite