Détails du sujet

Symfony 3 [Quiz 4] [Pile 3]

Param Converters, Personnalisation des pages d'erreur, Gestion des assets, Console, Deploiment dans le FrameWork Symfony 3.2

Toutes les cartes

Param Converters

Quelles sont les étapes, pour créer et utiliser son propre convertisseur de paramètres?

  1. Créer notre classe qui implémente l'interface ParamConverterInterface et y définir les deux méthodes obligatoires: supports() et apply()
  2. Définir notre classe comme un service que l'on tague avec 'request.param_converter'
  3. Appliquer l'annotation @ParamConverter("nomDuParamètre") à l'action de contrôleur de notre choix et inclure dans la signature ''nomDuParamètre"

Personnalisation des pages d'erreur

Lorsque le noyau attrape une exception, l'action show() du contrôleur ExceptionController du Bundle TwigBundle, retourne-t-elle une page d'erreur Symfony?

Oui

Pour info, le Bundle TwigBundle se trouve dans le répertoire:

vendor/symfony/symfony/src/Symfony/Bundle


Personnalisation des pages d'erreur

Les pages d'erreur de Symfony pour le mode dev et prod sont-elles les mêmes?

Non


Personnalisation des pages d'erreur

Il y a-t-il une page d'erreur par chaque type d'erreur?

  • Une page d'erreur pour l'erreur 404
  • Une page d'erreur pour l'erreur 500

etc...

Oui


Personnalisation des pages d'erreur

Pour personnaliser nos pages d'erreur pourquoi ne modifions-nous pas les pages originales situées dans le Bundle TwigBundle de Symfony?

Car ces pages originales modifiées pour être personnalisées, seraient remplacées aprés toute mise jour du répertoire vendor:

>php composer.phar update


Personnalisation des pages d'erreur

Comment remplacer les vues d'un Bundle par les notres?

On crée un répertoire

app/Resources/NomDuBundle/views

et on y place nos vues personnalisées qui doivent posséder le même nom que les vues qu'elles remplacent.


Personnalisation des pages d'erreur
  • Si la vue x.html.twig que l'on souhaite remplacer se trouve dans le répertoire

TwigBundle/Resources/views/Exception/

  • Dans quel répertoire doit-on sauver notre propre vue x.html.twig personnalisée qui écrasera la vue x.html.twig originale?

Dans le répertoire:

 

app/Resources/TwigBundle/views/Exception/


Personnalisation des pages d'erreur

Dans quel répertoire, Twig va-t-il chercher en premier les vues demandées?

  • app/Resources/
  • ou
  • TwigBundle/Resources/views/Exception
Dans le répertoire:

app/Resources/


Personnalisation des pages d'erreur

Pourquoi Symfony possède-t-il par défaut des pages d'erreur dans différents formats (error.html.twig, error.js.twig ...) que l'on trouve dans:

TwigBundle/Resources/views/Exception

  • Car il faut une page d'erreur disponible pour chaque format de réponse.
  • En effet, si notre navigateur attend une réponse en JavaScript et qu'une erreur survient, il faut que la page d'erreur rendue soit dans le format JavaScript.

Personnalisation des pages d'erreur

Par convention,si une erreur 404 html survient, le Bundle TwigBundle, affichera-t-il la vue

 

  • error404.html.twig
  • ou
  • error.html.twig?
La vue:

error404.html.twig


Personnalisation des pages d'erreur

Par convention, si une erreur 404 html survient, le Bundle TwigBundle, affichera-t-il la vue error.html.twig, si la vue error404.html.twig n'existe pas?

Oui


Personnalisation des pages d'erreur

Pour pouvoir voir les modifications d'une page d'erreur faut-il:

  • Effacer le répertoire var/cache
  • ou
  • un simple >php bin/console cache:clear suffit?

Il faut effacer le répertoire var/cache


Personnalisation des pages d'erreur

Normalement on personnalise que les pages d'erreur du mode production.

Mais si l'on souhaite personnaliser la page d'erreur html du mode développement, quel template doit-on écraser?

Le template:

TwingBundle/Resources/views/Exception/ Exception.html.twig


Gestion des assets

Quel est le nom du bundle que l'on peut ajouter à Symfony pour mieux gérer nos assets comme les images ou les fichiers CSS et JS?

Le bundle Assetic


Gestion des assets

Quel est le rôle du Bundle Assetic?

  • Le Bundle Assetic permet de diminuer le temps de chargement des assets (fichiers images, CSS, JS).
  • Pour dimunuer le nombre de requête, Assetic regroupe en production tous les fichiers de même type (js et css) en un seul.
  • Pour dimuner le temps de chargement, Assetic diminue en production la taille des fichiers en les minifiant.
  • Pour supprimer les métadatas des images et ajuster leur définition Assetic propose aussi des filtres.

Gestion des assets

En production, le bundle Assetic compresse-t-il comme un fichier zip ou minifie-t-il les assets?

Il minifie les assets


Gestion des assets

En développement, fait-on appel à Assetic pour regrouper et minifier les assets?

Non

Ainsi on garde un contenu lisible des assets pour mieux les déboguer pendant la phase de développement.


Gestion des assets

Le bundle Assetic contient-il par défaut les bibliothèques qui minifient les fichiers CSS et JS?

Non, Il faut les ajouter dans composer.json

Une bibliothèque qui minifie les fichiers CSS (leafo/scssphp) et une qui minifie les fichiers JS (patchwork/jsqueeze)


Gestion des assets - Dans le fichier composer.json

Que représentent les lignes 3 et 4?

Ajout de deux librairies pour le bundle Assetic

Les lignes 3 et 4 représentent respectivement, la librairie qui minifie les fichier CSS et la librairie qui minifie les fichiers JS


Gestion des assets - Dans le fichier composer.json

Avec la commande suivante les lignes 2, 3, 4 seront-elles ajoutées?

>php composer.phar require symfony/assetic-bundle

Non

Seulement la ligne 2 sera ajoutée.


Gestion des assets

Si l'on n'utilise pas Assetic, est-il recommandé de sauver les assets de chaque bundle dans leur bundle ou dans le répertoire web de notre projet?

Dans le répertoire web de notre projet
  • web/NomDuBundle1/css/
  • web/NomDuBundle1/js/
  • web/NomDuBundle1/img/
  • web/NomDuBundle2/css/
  • web/NomDuBundle2/js/
  • web/NomDuBundle2/img/  etc...

Gestion des assets - Dans un template twig

Si l'on utilise pas Assetic, dans quel répertoire se situe le fichier main.js?

Dans le répertoire

web/bundle1/css/


Gestion des assets

Avec Assetic, sauve-t-on dans un premier temps, les assets de chaque bundle dans:

  • le répertoire Resources/public de leur bundle
  • ou
  • le répertoire web de notre projet?
  • Dans un premier temps on met nous même nos assets dans le répertoire Resources/public/ de chaque bundle
  • Ensuite en mode developpement, Assetic les déplace sans regroupement et sans minification dans web/bundles/nomDuBundle/
  • Ensuite en mode production, Assetic les déplace aprés regroupement et minification dans web/img ou web/js ou web/css

Gestion des assets - Dans un template twig

Commentez ces lignes

C'est la manière de déclarer les assets avec Assetic
  • Le fichier main.css est situé dans le répertoire Resources/public/css du bundle Core
  • En mode developpement le fichier sera déplacé (ou symlinké) vers web/bundles/core/css
  • En mode production le fichier sera déplacé vers web/css

Gestion des assets - En mode développement

Quelle commande CLI permet de déplacer (publier) nos assets situés dans les répertoires Resources/public/css de nos bundles, vers les répertoires web/bundles/NonDuBundle1/css, web/bundles/NonDuBundle2/css etc...

>php bin/console assets:install


Gestion des assets - En mode développement

Que fait la commande CLI suivante?

>php bin/console assets:install --symlink

  • Au lieu de déplacer nos assets situés dans les répertoires Resources/public/ de nos bundles, vers les répertoires web/bundles/NonDuBundle
  • Symfony crée un lien situé dans web/bundles/NonDuBundle/ qui pointe vers le répertoire /Resources/public/ du bundle NomDuBundle

Gestion des assets - En mode développement

Aprés la commande CLI suivante, toutes modifications du contenu de nos assets seront-elles prisent en compte automatiquement?

 

>php bin/console assets:install --symlink

 

  • Oui, car un lien pointe vers les assets situés dans les bundles.
  • Nous n'avons plus besoin de taper de nouveau cette ligne de commande pour prendre en compte la modification du contenu de nos asssets.

Gestion des assets - Dans un template

Ces lignes sont-elles correctes pour gérer deux fichiers CSS avec Assetic?

Oui


Gestion des assets-Dans un template que font ces lignes?
Déclaration des assets d'un bundle dans un template

Tous les fichiers CSS du bundle Core seront pris en compte par Assetic


Gestion des assets - En mode production

Quelle commande CLI permet de déplacer (publier) les assets des bundles vers

  • /web/css
  • /web/js
  • /web/img

>php bin/console assetic:dump --env=prod --no-debug


Gestion des assets

Quelle est la différence entre ces deux lignes de commande?

 

  1. >php bin/console assets:install
  2. >php bin/console assetic:dump --env=prod --no-debug

Publication des assets

  1. Pour le mode developpement
  2. Pour le mode production

Gestion des assets-Quelle est l'utilité du filtre ''cssrewrite''?

Ce filtre permet de réécrire les chemins relatifs situés dans les fichiers CSS.


Gestion des assets - Quelle est l'utilité du filtre ''scssphp''?

Il permet de minifier les fichiers CSS en mode production et développement.


Gestion des assets-Le filtre ''scssphp'' s'appliquera-t-il en mode dev?
Non

Il sera appliqué en mode production uniquement car il est précédé d'un point d'intérrogation


Gestion des assets - Quelle est l'utilité du filtre ''jsqueeze''?

Il permet de minifier les fichiers JS en mode production et développement


Gestion des assets - Dans un template

La minification des fichiers CSS se fera-t-elle en mode dev?

Non

La minification se fera qu'en mode production, car un point d'interrogation précéde le filtre ''scssphp''


Utilisation de la console depuis le navigateur

Quel bundle nous recommande-t-on d'installer pour avoir une console dans le navigateur web?

Le Bundle CoreSphereBundle


Utilisation de la console depuis le navigateur

Quelle est l'utilité du bundle CoreSphereBundle?

CoreSphereBundle permet d'avoir une ligne de commande disponible dans notre navigateur web en mode developpement dans le cas où notre serveur de production ne mettrait pas à disposition du developpeur une console SSH.


Utilisation de la console depuis le navigateur web

Quelle URL doit-on entrer dans le navigateur, pour accéder à la console CoreSphère?

www.nomDuSite/web/app_dev.php/_console


Déployer son site

Citez quelques points à faire lors du déploiement de son site Symfony sur un serveur de production?

  • S'assurer que son site fonctionne parfaitement en locale
  • Vide le cache dev et prod
  • Vérifier la qualité de son code sur SensiolabsInsight
  • Installer la console CoreSphere
  • Soigner les pages d'erreurs
  • Vérifier la sécurité des dépendances avec Sensiolabs Security-Checker
  • Vérifier la compatibilité du serveur avec web/config.php
  • Mettre en place la BDD
  • Créer de belles URLs

Gestion des assets - Dans un template

La minification de ce fichier JS se fera-t-elle en mode dev?

Non

La minification se fera qu'en mode production, car un point d'interrogation précéde le filtre ''jsqueeze''