Symfony4将EntityManagerInterface注入与框架无关的类

时间:2019-05-06 15:15:26

标签: php interface symfony4 php-7 entitymanager

我尝试创建“与框架无关”的业务类。那就是说,我的班级不应引用任何框架类,而应仅引用项目依赖项。

我尝试了以下代码,但在service.yml中使用typehint却没有成功...

这是我的自定义界面:

namespace App\Interfaces;

interface EntityManagerInterface extends \Doctrine\ORM\EntityManagerInterface
{
}

这里是与框架无关的业务

use App\Interfaces\EntityManagerInterface;

class MyBusiness
{
    public function __construct(EntityManagerInterface $em)
    {
        ...
    }
}

在我的控制器中注入EntityManager的地方:

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Doctrine\ORM\EntityManagerInterface;

class testController extends AbstractController
{
    public function testAction(EntityManagerInterface $em)
    {
        $myBusiness = new MyBusiness($em);
    }
}

所以我由于注入了错误的类而收到PHP错误:

Argument 1 passed to App\Business\MyBusiness::__construct() must implement interface App\Interfaces\EntityManagerInterface, instance of Doctrine\ORM\EntityManager given, called in /var/www/src/Controller/testController.php on line 7

如何将EntityManager正确地注入与框架无关的业务?

谢谢

1 个答案:

答案 0 :(得分:0)

因为您传递了教义的EntityManager,显然它没有实现您的界面。

我不太了解这样做的意义,因为并非所有Framework的“ EntityManager”都是相同的。

但是我能做的第一件事是制作某种“ Adapter”,它将通过的EntityManager封装在您自己的类中,该类实现您自己的EntityManagerInterface,然后将其传递给您的业​​务。