2016-07-23 10 views
0

Ich versuche, einen Dienst zu erstellen:symfony 3 Argument 1 bestanden [gewissen Service] :: __ construct() muss eine Instanz von [etwas] Instanz Lehre ORM EntityRepository gegeben

<?php 

namespace AppBundle\Service; 

use AppBundle\Repository\GroupEntityRepositoryInterface; 
use AppBundle\Repository\GroupUserRepository; 
use AppBundle\Repository\GroupUserRepositoryInterface; 
use AppBundle\Entity\Group; 
use AppBundle\Repository\GroupRepository; 


class GroupUserService 
{ 
    private $groupRepository; 
    private $groupUserRepository; 



    /** 
    * @param GroupRepositoryInterface $groupRepository 
    * @param GroupUserRepositoryInterface $groupUserRepository 
    */ 
    public function __construct(GroupRepository $groupRepository /*, GroupUserRepositoryInterface $groupUserRepository*/) 
    { 
     $this->groupRepository = $groupRepository; 
     // $this->groupUserRepository = $groupUserRepository; 
    } 

    public function deleteGroup(Group $group) 
    { 
     $this->groupRepository->delete($group); 
    } 

    public function createGroup(Group $group) 
    { 
     $this->groupRepository->add($group); 
    } 
} 

Und ich schrieb Konfiguration ein Repository in diesem Dienst zu injizieren:

services: 
# service_name: 
#  class: AppBundle\Directory\ClassName 
#  arguments: ["@another_service_name", "plain_value", "%parameter_name%"] 

    group_repository: 
     class: AppBundle\Repository\GroupRepository 
     factory: ["@doctrine.orm.entity_manager", getRepository] 
     arguments: 
      - AppBundle\Entity\Group 

    group_user_repository: 
     class: AppBundle\Repository\GroupUserRepository 
     factory: ["@doctrine.orm.entity_manager", getRepository] 
     arguments: 
      - AppBundle\Entity\GroupUser 

    group_user_service: 
     class: AppBundle\Service\GroupUserService 
     arguments: ["@group_repository", "@group_user_repository"] 
     #arguments: 
     # - "@group_repository" 

ich den Fehler:

Catchable Fatal Error: Argument 1 passed to AppBundle\Service\GroupUserService::__construct() must be an instance of AppBundle\Repository\GroupRepository, instance of Doctrine\ORM\EntityRepository given, called in E:\other\dropbox\Dropbox\programavimas\kodo pavyzdziai\htdocs\users_admin_demo\var\cache\dev\appDevDebugProjectContainer.php on line 1654 and defined

können Sie erklären, warum es EntityRepository instance bekommt, wenn ich GroupRepository übergeben habe? Und wie man es repariert? Ich habe versucht, ähnliche Fragen zu suchen, aber nach ein paar Stunden sehe ich kein Ergebnis.

Update:

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity(repositoryClass="AppBundle\Repository\GroupRepository") 
* Group 
*/ 
class Group 
{ 
    /** 
    * @var string 
    */ 
    private $name; 

    /** 
    * @var integer 
    */ 
    private $id; 


    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Group 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 
} 

Group.orm.xml:

<?xml version="1.0" encoding="utf-8"?> 
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> 
    <entity name="AppBundle\Entity\Group" table="`group`"> 
    <unique-constraints> 
     <unique-constraint name="UNIQ_6DC044C55E237E06" columns="name"/> 
    </unique-constraints> 
    <id name="id" type="integer" column="id"> 
     <generator strategy="IDENTITY"/> 
    </id> 
    <field name="name" type="string" column="name" length="255" nullable="false"> 
     <options> 
     <option name="fixed"/> 
     </options> 
    </field> 
    </entity> 
</doctrine-mapping> 

Antwort

6

definieren AppBundle\Repository\GroupRepository als respository für AppBundle\Entity\Group mit

@ORM\Entity(repositoryClass="AppBundle\Repository\GroupRepository") 

XML

<entity 
    name="AppBundle\Entity\Group" 
    repository-class="AppBundle\Repository\GroupRepository"> 
</entity> 
+0

wo sollte ich diesen Code ablegen? Ich habe hier http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes gefunden, das über dem Entitätsklassennamen steht. Aber nichts ändert sich. Cache gelöscht. –

+0

Bitte zeigen Sie Ihren Group-Entity-Code –

+0

aktualisierte Frage. Vielleicht sollte das irgendwie in xml geschrieben werden, nicht in Anmerkungen, weil ich xml für config verwende? –