getUser из Symfony Безопасность не может получить мой пользовательский репозиторий - PullRequest
0 голосов
/ 03 августа 2020

Моя проблема - это метод $this->getUser(); (вызываемый из контроллера) из Symfony Безопасность не может получить мой пользовательский репозиторий.

The "App\Model\ODM\Repository\UserRepository" document repository implements "Doctrine\Bundle\MongoDBBundle\Repository\ServiceDocumentRepositoryInterface", but its service could not be found. Make sure the service exists and is tagged with "doctrine_mongodb.odm.repository_service".

У меня есть CompilerPass, который получает мои репозитории и добавить их в определения контейнеров в зависимости от некоторого значения env. Я добавляю репо с интерфейсами «generi c» (действительными как для ODM, так и для ORM) в качестве ключей И с репо FQCN в качестве ключей, поэтому они должны быть доступны как через общий интерфейс c, так и через истинное имя репо, но Пока работаю только с ODM. Кроме того, я «помечаю» свое репо аргументом doctrine_mongodb, чтобы расширить ServiceDocumentRepository baseClass.

Я не включаю compilerPass, потому что класс довольно «тяжелый», но при необходимости я включите его.

Вот мой UserRepo

class UserRepository extends BaseRepository implements RepositoryInterface, UserRepositoryInterface
{
    /**
     * UserRepository constructor.
     *
     * @param ManagerRegistry $managerRegistry
     */
    public function __construct(ManagerRegistry $managerRegistry)
    {
        parent::__construct($managerRegistry, User::class);
    }

...

My BaseRepo (здесь всего несколько методов, интересно только расширение)

abstract class BaseRepository extends ServiceDocumentRepository implements RepositoryInterface
{
 ...

Отлично работает "in-app", я мог бы создать пользователя на странице регистрации, но, используя метод $guardHandler->authenticateUserAndHandleSuccess() после регистрации, я перенаправляюсь на мою домашнюю страницу, где находится $this->getUser();, а затем у меня появляется сообщение об ошибке, опубликованное выше.

После некоторых исследований выяснилось, что проблема в Doctrine\Bundle\MongoDBBundle\Repository\ContainerRepositoryFactory

container этого класса, похоже, не имеет никакого моего определения Repo.

I наверняка что-то пропустил но не знаю где. Я помню, как несколько лет делал нечто подобное go, но расширяло DocumentRepository, а не ServiceDocumentRepository.

Если вам нужна другая информация, дайте мне знать.

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Мне кажется, что этот вопрос действительно тупой, теперь, когда я нашел решение ...

В сообщении об ошибке это было БУКВАЛЬНО, мне просто пришлось добавить doctrine_mongodb.odm.repository_service в мое определение репо в моем проходе компилятора

...
$definition->addArgument(new Reference('doctrine_mongodb'));
$definition->addTag('doctrine_mongodb.odm.repository_service');
...

Спасибо людям, которые посмотрели на мою проблему, и извините за потраченное время.

Надеюсь, этот ответ может помочь другим людям, которые регистрируют репо в CompilerPass

(я поставлю этот ответ как решение как можно скорее, через 2 дня)

0 голосов
/ 03 августа 2020

Включили ли вы autowire в своем services.yml?

services:
    _defaults:
        autowire: true
        autoconfigure: true

    App\Repository\:
        resource: '../src/Repository/*'
...