2

I am trying to create a service:

<?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);
    }
}

And I wrote configuration to inject a repository into that service:

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"

I get the error:

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

Can you explaing why it gets EntityRepository inststance if I passed GroupRepository? And how to fix it? I tried searching similar questions but after couple of hours I do not see result.

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>
Dariux
  • 3,953
  • 9
  • 43
  • 69

1 Answers1

12

Define AppBundle\Repository\GroupRepository as respository for AppBundle\Entity\Group using

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

XML

<entity
    name="AppBundle\Entity\Group"
    repository-class="AppBundle\Repository\GroupRepository">
</entity>
Arthur
  • 2,869
  • 14
  • 25
  • where should I put this code? I found here http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes that its above the entity class name. But nothing changes. Cleared cache. – Dariux Jul 23 '16 at 14:26
  • updated question. Maybe this somehow should be written in xml, not in annotations because I use xml for config? – Dariux Jul 23 '16 at 14:35
  • Of course, If you are using XML mapping you should define it in xml file. Please, look at updated answer – Arthur Jul 23 '16 at 14:38
  • Just look at documentation by you link, you can select xml mapping type there :) – Arthur Jul 23 '16 at 14:48
  • Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/118092/discussion-between-darius-v-and-artur-vesker). – Dariux Jul 23 '16 at 14:52