Symfony4 Внедрить EntityManagerInterface в независимый от фреймворка класс - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь создать «фреймворк-бизнес». Это означает, что мой класс не должен иметь никаких ссылок на какие-либо классы фреймворка, только зависимости проекта.

Я попытался следующие коды, с typehint в service.yml без успеха ...

Вот мой пользовательский интерфейс:

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 голосов
/ 07 мая 2019

Потому что вы передаете доктрину EntityManager, которая явно не реализует ваш интерфейс.

Я не совсем понимаю смысл этого, потому что не все EntityManager в Framework одинаковы.

Но первое, что я мог бы сделать, - это создать своего рода "Adapter", который будет инкапсулировать переданный EntityManager в ваш собственный класс, который реализует ваш собственный EntityManagerInterface, а затем передаст его вашему бизнесу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...