« Programmation PHP avec Symfony/Introduction » : différence entre les versions

Contenu supprimé Contenu ajouté
désuet
Ligne 21 :
* Assetic : gestionnaire de fichiers .css et .js.
* Swift Mailer : messagerie électronique.
 
=== Critique ===
Il peut être redondant de mettre à jour des fichiers .yml ou .yaml pour déclarer les services (qui sont des instanciations de classes), en plus de leurs classes .php (qui peuvent se contredire) à chaque changement de structure. C'est pourquoi depuis Symfony 4, l'{{wt|autowiring}} est activé par défaut. Toutefois il ne fonctionne pas avec les classes ayant autre chose que des services dans leurs constructeurs<ref>https://symfony.com/doc/current/service_container/autowiring.html#fixing-non-autowireable-arguments</ref>.
 
La présente page se veut une prise en main la plus rapide possible du framework qui peut paraitre peu intuitif au début.
 
{{remarque|En YAML, on préfèrera déclarer les services avec des simples quotes car les doubles nécessitent d'échapper les antislashs.}}
 
== Créer un projet ==
Ligne 152 ⟶ 147 :
 
Depuis SF4, il faut utiliser un fichier .env non versionné à la racine du projet, dont les lignes sont injectées ensuite dans les .yaml avec la syntaxe : <code>'%env(APP_SECRET)%'</code>. Le mode debug est activé avec <code>APP_DEBUG=1</code> dans ce fichier .env.
 
{{remarque|En YAML, on préfèrera déclarer les services avec des simples quotes car les doubles nécessitent d'échapper les antislashs.}}
 
=== Commandes ===
Ligne 164 ⟶ 161 :
* <code>php bin/console list</code> : liste toutes les commandes du projet.
* <code>php bin/console debug:router</code> : liste toutes les routes (URL) du site.
* <code>php bin/console debug:container</code> : liste tous les services avec leurs alias (qui sont des instanciations des classes).
* <code>php bin/console debug:autowiring --all</code> : liste tous les services automatiquement déclarés.
* <code>php bin/console cache:clear</code> : vide la mémoire cache du framework.
Ligne 368 ⟶ 365 :
 
==== Autowiring ====
Avant SF2.8, il était obligatoire de déclarer chaque service dans les fichiers de configuration .yml ou .yaml, en plus de leurs classes .php (qui peuvent se contredire), et de les mettre à jour à chaque changement de structure.
Depuis SF2.8, l'{{wt|autowiring}} peut être définit à "true" pour injecter automatiquement les arguments connus (ex : une autre classe appelée par son espace de nom), donc sans déclaration manuelle<ref>https://symfony.com/doc/current/service_container/autowiring.html</ref>.
 
Depuis SF2.8, l'{{wt|autowiring}} peut être définit à "true" pour injecter automatiquement les arguments connus (ex : une autre classe appelée par son espace de nom et son nom), donc sans déclaration manuelle<ref>https://symfony.com/doc/current/service_container/autowiring.html</ref>.
 
Depuis SF4, cette déclaration est par défaut sans le fichier services.yaml, mais on peut la placer dans un autre fichier qui sera importé par le premier, par exemple avec :
Ligne 392 ⟶ 391 :
- '../src/**/Entity' # Tous les sous-dossiers "Entity"
</syntaxhighlight>
 
 
Par défaut, l'autowiring ne fonctionne pas avec les classes ayant autre chose que des services dans leurs constructeurs<ref>https://symfony.com/doc/current/service_container/autowiring.html#fixing-non-autowireable-arguments</ref>, mais pour lui injecter des scalaires autoamtiquement, il suffit que ces derniers soit déclarés aussi. Ex :
<syntaxhighlight lang=yaml>
services:
_defaults:
bind:
$projectDir: '%kernel.project_dir%'
</syntaxhighlight>
 
 
==== En SF2 ====