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

查看:365
本文介绍了symfony 3传递给[一些服务]的参数1 :: __ construct()必须是一个[something]实例的Doctrine\ORM\EntityRepository给定的实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个服务:

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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆