12
votes

Obtenir un conteneur de service dans la commande Symfony 2 console donne "getkernel () sur un non-objet"

Dans la fonction configure () , j'ai essayé d'obtenir le conteneur de service xxx blockQuote>

Erreur fatale PHP: appelez à une fonction de membre getkernel () sur un non-objet dans ... \ symfony \ Bundle \ frameworkbundle \ commande \ conteneurawarecommand.php à la ligne 37

dois-je faire quelque chose de différent?

J'ai remarqué que cela fonctionne si j'appelle getcontainer < / code> dans exécuter () . Mais je me demande si c'est possible de getContainer () dans configure () . Je souhaite obtenir un paramètre de configuration à utiliser dans ADDOPTION argument de valeur par défaut.

sinon je pourrais utiliser xxx

qui apparaît Abit plus intuitif?


3 commentaires

Je pense que le problème est de savoir comment vous le faites. L'ajout d'une option Basing sur une valeur de configuration n'est pas une très bonne solution. Qu'essayez-vous exactement d'atteindre?


Je veux définir les valeurs par défaut dans les paramètres.ini. Quelque chose accessible via l'application et la console. Bien que sur la 2e pensée, je pourrais peut-être m'éloigner avec une défaillance de la couleur codée ... Hmm ... Quel est le problème avec ma façon de le faire?


Je suis désolé, j'ai mal compris ce que vous essayez d'atteindre. Il n'y a rien de mal à faire de votre façon de le faire. Je pense que la seule solution peut être de définir la valeur par défaut sur false dans configure () puis définissez-le manuellement dans exécuté () .


3 Réponses :


2
votes

Il apparaît que le conteneur de service n'a pas été initialisé dans configurer code>. Je peux y accéder dans exécuter code>.

Comme pour les valeurs par défaut des options de console, je peux utiliser quelque chose comme p> xxx pré>

dans de nombreux cas Symfony2 vous permet de définir une valeur par défaut lors de la récupération des paramètres / variables. Donc, un raccourci pour la solution mentionnée ci-dessus serait simplement: p>

$opt1 = $input->getOption('opt1', $default);


0 commentaires

21
votes

appel $ ceci-> conteneur = ceci-> getApplication () -> getkernel () -> getContainer (); dans Execute (). Voir https://stackoverflow.com/a/7517803/297679


1 commentaires

$ ceci-> conteneur a un accès privé, vous ne pouvez donc pas la définir dans une classe extension.



2
votes

Malgré toutes les informations que j'ai trouvées sur Google (y compris ce fil), rien ne semble fonctionner. J'ai finalement compris pourquoi je n'étais pas capable de recevoir un noyau.

dans une copie 1: 1 de la documentation, j'ai créé une application de fichier.php: xxx

Puis exécutez l'application en exécutant:

./ Application.php this: tandis que ou php application.php this: que

Cela n'a pas fonctionné pour moi. Pour une raison quelconque, le noyau n'est pas disponible lorsque cela faisait cela. Cependant, c'est lorsque j'exécute l'application à l'aide de:

App / Console PHP Ceci: que

mon devinette est cette application d'application / console d'application fait beaucoup plus que mon application.php fait, comme le démarrage d'un noyau.

avec l'exécution de l'application comme "PHP App / Console Ceci: que" tout fonctionne bien et je suis capable d'utiliser: xxx

qui était ce que je nécessaire.


0 commentaires