传递给__construct()的参数应该是SomeRepository,而不是EntityRepository的实例

时间:2017-03-28 01:52:17

标签: php symfony doctrine-orm doctrine symfony-2.8

我已根据symfony docs定义了自定义存储库,并按照此blog post将其定义为服务。这通常很好,除非有时我得到例外:

  SomeService.php第20行中的

FatalThrowableError:类型错误:参数3   传递给SomeService :: __ construct()必须是。的实例   SomeRepository,Doctrine \ ORM \ EntityRepository的实例   给定,在var / cache / dev / appDevDebugProjectContainer.php中调用   7651

这种情况发生了很多,通常清除缓存和doctrine元数据缓存解决了它。但有时却没有。

php app/console cache:clear
php app/console doctrine:cache:clear-metadata

我实际上并不理解为什么会发生这种情况或者在清除缓存不起作用的时候如何修复它。我知道这个问题(或其衍生物)已被提出很多问题,例如hereherehereherehere。但是这些答案都没有解决我的问题,因为据我所知,我已经正确地定义了所有内容,我们还有一堆其他存储库以完全相同的方式定义,它们都可以正常工作。

# services.yml
app.repository.some:
    class: AppBundle\Repository\SomeRepository
    factory: ["@doctrine.orm.default_entity_manager", getRepository]
    arguments:
        - AppBundle\Entity\Some

app.some_service:
    class: AppBundle\Services\SomeService
    arguments:
        - "@app.repository.some"
// Repository class
<?php

namespace AppBundle\Repository;

use Doctrine\ORM\EntityRepository;

class SomeRepository extends EntityRepository
{

}
// Entity class
<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\SomeRepository")
 * @ORM\Table()
 * @ORM\Entity
 */
class Some
{
// Service class
<?php

namespace  AppBundle\Services;

use AppBundle\Repository\SomeRepository;

class NotificationService
{
    /** @var SomeRepository */
    protected $someRepository;

    public function __construct(
        SomeRepository $someRepository,
    ) {

是否有其他需要清除的缓存或我遗漏的东西?

1 个答案:

答案 0 :(得分:2)

摆脱第二个@ORM \ Entity,它会正常工作