Symfony 4: борьба за пределами контроллера и автопроводки - PullRequest
0 голосов
/ 11 октября 2018

Я делал это бесчисленное количество раз сейчас, и, возможно, это потому, что автопроводка и внедрение зависимостей слишком сложны для меня, и мне просто нужно обойти это, но после последовательного поиска у меня все еще есть проблемы с пониманием правильного способа исправить это.

У меня есть этот класс, из которого я пытаюсь создать запрос - это все замечательно и хорошо, если я расширяю «Контроллер» - как только я отклоняюсь от этого, я либо получаю:

$em = new EntityManagerInterface();
    $query = $this->em->createQuery('SELECT m FROM App:Main m')
            ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
    print_r($query);

Это очевидно, вы не можете создать экземпляр интерфейса

Невозможно установить интерфейс Doctrine \ ORM \ EntityManagerInterface

Или:

Use App\Util\Db\Dbhelper;
$db = $this->container->get(DbHelper::class);
$result = $db->allMains();

Слишком мало аргументов для функции App \ Util \ Db | DbHelper :: __ construct (), 0 передано 1 ожидается

Другие классы ожидаютВнедрение зависимостей EntityManagerInterface очевидно.Вся помощь очень ценится, я не знаю, почему я не могу правильно обернуть голову вокруг этого.

Класс DbHelper:

namespace App\Util\Db;

use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use App\Entity\Main;

class DbHelper
{
    protected $em;

    public function __construct(EntityManagerInterface $em)
    {
        $this->em = $em;
    }

    public function getNames()
    {
        $names = $this->em->getRepository(Main::class)->findAll();
        foreach ($names as $name) {
            echo $name->getName();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...