我尝试创建“与框架无关”的业务类。那就是说,我的班级不应引用任何框架类,而应仅引用项目依赖项。
我尝试了以下代码,但在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正确地注入与框架无关的业务?
谢谢
答案 0 :(得分:0)
因为您传递了教义的EntityManager
,显然它没有实现您的界面。
我不太了解这样做的意义,因为并非所有Framework的“ EntityManager”都是相同的。
但是我能做的第一件事是制作某种“ Adapter
”,它将通过的EntityManager
封装在您自己的类中,该类实现您自己的EntityManagerInterface
,然后将其传递给您的业务。