繁体   English   中英

无法自动服务

[英]Cannot autowire service

我正在尝试从FOSUserBundle(Symfony3.4)实现UserManager。

服务/ 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('aaa@gmail.clom');
        if($user){
            return false;
        }
        return true;
    }
}

当我尝试调用此方法时,我得到:

无法自动装配服务“AppBundle \\ Service \\ Register”:方法“__construct()”的参数“$ userManager”引用类“FOS \\ UserBundle \\ Model \\ UserManager”但不存在此类服务。 您应该将此类别名为现有的“fos_user.user_manager.default”服务。

我现在应该怎么办?

我有一个类似的问题(在Symfony 4中,但原则应该适用于3.4)使用不同的服务并设法在Symfony doc页面上自动定义服务依赖项(自动装配)找到答案。

这是该页面的摘录:

配置自动装配的主要方法是创建一个id与其类完全匹配的服务。 在前面的示例中,服务的id是AppBundle\\Util\\Rot13Transformer ,它允许我们自动自动装配此类型。

这也可以使用别名来完成。

您需要别名,因为服务ID与类名不匹配。 这样做:

# 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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM