Comment puis-je injecter de la doctrine en service Symfony2
Je simplifiées contrôleur et n'ont pas de conteneur de services. Je suis en train d'injecter de la doctrine dans un service. Voici le message d'erreur:
ContextErrorException: Catchable Fatal Error: Argument 1 passed to Acme\Controller\WebController::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /home/hcs/Core/app/cache/dev/appDevDebugProjectContainer.php on line 3036 and defined in /home/hcs/Core/src/Acme/Controller/WebController.php line 28
Voici mon service def:
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
orm:
mappings:
Acme:
type: annotation
dir: %kernel.root_dir%/../src/Acme/Model
prefix: Acme\Model
alias: Model
is_bundle: false
services:
WebController:
class: Acme\Controller\WebController
arguments: [@doctrine.orm.entity_manager ]
parent: elnur.controller.abstract
Et ma classe
use Doctrine\ORM\EntityManager;
/**
* @Service("WebController", parent="elnur.controller.abstract")
*/
class WebController extends AbstractController
{
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
Ici, elle est sortie de SF2 conteneur (php app/console container:debug | grep-i fr tity)
doctrine.orm.default_entity_manager container EntityManager5330e85ad5afb_546a8d27f194334ee012bfe64f629947b07e4919\__CG__\Doctrine\ORM\EntityManager
doctrine.orm.entity_manager n/a alias for doctrine.orm.default_entity_manager
doctrine.orm.validator.unique container Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator
form.type.entity container Symfony\Bridge\Doctrine\Form\Type\EntityType
translator container Symfony\Component\Translation\IdentityTranslator
J'ai aussi essayé arguments: [ "@doctrine.orm.entity_manager" ] dans la définition du service et toujours rien. J'ai essayé de nettoyer le cache de mon navigateur, mais je ne peux pas pour la vie de moi à obtenir un EM injecté. Ce que je fais mal?
où et comment appelez-vous ce service?
Je suis à la définition de mon service dans la configuration.yml et le ci-dessus comme un argument. Mais je reçois le message d'erreur mentionné ci-dessus au moment de la construction.
Comment allez-vous construire? Dans un contrôleur à l'aide:
Le service est un contrôleur. Il est chargé à chaque fois qu'il est interrogé à partir d'une demande
["@doctrine.orm.entity_manager"]
devrait fonctionner pour les arguments.Je suis à la définition de mon service dans la configuration.yml et le ci-dessus comme un argument. Mais je reçois le message d'erreur mentionné ci-dessus au moment de la construction.
Comment allez-vous construire? Dans un contrôleur à l'aide:
$WebController = $this->get('WebController');
Ou êtes-vous juste de faire $WebController = new WebController()
?Le service est un contrôleur. Il est chargé à chaque fois qu'il est interrogé à partir d'une demande
OriginalL'auteur Sam Levin | 2014-03-27
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que vous êtes le mélange des deux YAML définition des services et DiExtra les annotations pour la même classe. La définition YAML est complet et offre la dépendance, mais vous n'avez pas ajouté
@InjectParams
de jouer avec les@Service
annotation. Fondamentalement, vous êtes la création de deux services de la classe unique à l'aide de différentes approches et les annotations approche n'est pas complète.Soit supprimer le
@Service
l'annotation de la classe, ou, si vous préférez les annotations (ce que je fais), injecter les dépendances avec les annotations de trop et de se débarrasser de la YAML définition de la prestation:La
@InjectParams
annotation correspond à des noms de paramètres comme$em
de service de noms comme@em
. Puisqu'il n'est pas@em
service, vous devez remplacer la valeur par défaut de correspondance avec l'@Inject
annotation.Mais il y a un moyen de le simplifier. Vous pouvez alias le gestionnaire d'entité à
@em
dans votre fichier de configuration YAML:Maintenant, vous pouvez simplifier la
@InjectParams
annotation:OriginalL'auteur Elnur Abdurrakhimov