Я пытаюсь реализовать UserManager из FOSUserBundle (Symfony3.4).
Сервис / Register.php
<?php
namespace AppBundle\Service;
use FOS\UserBundle\Model\UserManager;
class Register
{
private $userManager;
public function __construct(UserManager $userManager)
{
$this->userManager = $userManager;
}
public function register() {
$user = $this->userManager->findUserByUsernameOrEmail('[email protected]');
if ($user){
return false;
}
return true;
}
}
Когда я пытаюсь вызвать этот метод, я получаю:
Cannot autowire service "AppBundle\Service\Register": argument "$userManager" of method "__construct()" references class "FOS\UserBundle\Model\UserManager" but no such service exists. You should maybe alias this class to the existing "fos_user.user_manager.default" service.
Что мне теперь делать?
Покажите нам файл определения ваших услуг.






У меня была аналогичная проблема (в Symfony 4, но принципы должны применяться к 3.4) с другим сервисом, и мне удалось найти ответ на странице документации Symfony Автоматическое определение зависимостей сервисов (автоматическое подключение).
Вот выдержка с той страницы:
The main way to configure autowiring is to create a service whose id exactly matches its class. In the previous example, the service's id is
AppBundle\Util\Rot13Transformer, which allows us to autowire this type automatically.This can also be accomplished using an alias.
Вам нужен псевдоним, потому что идентификатор службы не соответствует имени класса. Итак, сделайте это:
# app/config/services.yml
services:
# ...
# the `fos_user.user_manager.default` service will be injected when
# a `FOS\UserBundle\Model\UserManager` type-hint is detected
FOS\UserBundle\Model\UserManager: '@fos_user.user_manager.default'
Возможно, потребуется добавить псевдоним для класса.