Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot autowire service

I am trying to implement UserManager from FOSUserBundle (Symfony3.4).

Service/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;
    }
}

When I try call this method I get:

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.

What should I do now?

like image 820
Monolite Avatar asked Mar 15 '18 19:03

Monolite


1 Answers

I had a similar problem (in Symfony 4, but the principles should apply to 3.4) with a different service and managed to find the answer on the Symfony doc page Defining Services Dependencies Automatically (Autowiring).

Here's an extract from that page:

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.

You need an alias because the service ID doesn't match the classname. So do this:

# 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'
like image 60
Sam Avatar answered Oct 17 '22 12:10

Sam