symfony 3传递给[一些服务]的参数1 :: __ construct()必须是一个[something]实例的Doctrine\ORM\EntityRepository给定的实例 [英] symfony 3 Argument 1 passed to [some service]::__construct() must be an instance of [something] instance of Doctrine\ORM\EntityRepository given
问题描述
我正在尝试创建一个服务:
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:
可追究的致命错误:传递给AppBundle\Service\GroupUserService :: __ construct()的参数必须是AppBundle的一个实例\\ Repository\GroupRepository,Doctrine\ORM\EntityRepository的实例,在E中调用:\other\dropbox\Dropbox\programavimas\kodo pavyzdziai\htdocs\users_admin_demo\var\cache\\ \\ dev\appDevDebugProjectContainer.php在行1654并定义
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
您能否解释为什么如果我通过GroupRepository获取EntityRepository实例?怎么解决?我尝试搜索类似的问题,但几个小时后我看不到结果。
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.
更新:
<?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:
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>
推荐答案
定义 AppBundle\Repository \GroupRepository
作为 AppBundle\Entity\Group
使用
@ORM\Entity(repositoryClass="AppBundle\Repository\GroupRepository")
XML
<entity
name="AppBundle\Entity\Group"
repository-class="AppBundle\Repository\GroupRepository">
</entity>
这篇关于symfony 3传递给[一些服务]的参数1 :: __ construct()必须是一个[something]实例的Doctrine\ORM\EntityRepository给定的实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!