Je n'ai pas accès au conteneur dans mon contrôleur
Je suis en train d'essayer d'accéder à un service dans une Symfony Contrôleur
$session = $this->get('session');
Mais j'obtiens l'erreur suivante:
PHP Fatal error: Call to a member function get() on a non-object
J'ai pensé que Symfony2 avait les contrôleurs définis comme des services par défaut.
Remarque: cette question a été initialement demandé par Dbugger, mais il l'a retirée sans raison, alors qu'il a déjà été répondu.
OriginalL'auteur Emii Khaos | 2013-09-25
Vous devez vous connecter pour publier un commentaire.
Utiliser le conteneur dans les contrôleurs de
get()
n'est qu'un raccourci de la fonction fournie par le Symfony base de Contrôleur de classe pour accéder au conteneur.Votre contrôleur doit étendre cette classe pour utiliser cette fonction:
Si vous ne voulez pas dépendre de cette classe (pour certaines raisons), vous pouvez étendre
ContainerAware
pour obtenir le conteneur injecté et de l'utiliser comme dans leget()
raccourci:La création de contrôleurs sur votre propre
Les contrôleurs ne sont pas définis comme des services par défaut, vous pouvez les définir, mais il n'est pas nécessaire pour obtenir le conteneur. Si une demande est faite, le framework de routage détermine le contrôleur, qui doivent être appelés. Ensuite, le contrôleur se construit et que le conteneur est injecté via le
setContainer()
méthode.Mais si vous construisez le contrôleur sur votre propre (dans un test ou n'importe où ailleurs), vous avez à injecter le conteneur sur votre propre.
Vous pouvez voir comment le vieux la réponse est? Vous pouvez voir que c'est un wiki de la communauté d'entrée? Aller et mise à jour de modifier la réponse au lieu de se moquer, c'est obsolète...
OriginalL'auteur