5

このリンクに従ってFOSのUserManagerを拡張しようとしました

私のサービスは正しく検出されましたが、解決できないエラーがあります:

ErrorException: Catchable Fatal Error: Argument 1 passed to FOS\UserBundle\Entity\UserManager::__construct() must be an instance of Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface, none given, called in 

MyUserManager :

namespace ChoupsCommerce\UserBundle\Model;

use FOS\UserBundle\Entity\UserManager;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;

class MyUserManager extends UserManager
{
    public function loadUserByUsername($username)
    {
        $user = $this->findUserByUsernameOrEmail($username);

        if (!$user) {
            throw new UsernameNotFoundException(sprintf('No user with name "%s" was found.', $username));
        }

        return $user;
    }
}
4

3 に答える 3

18

私は同じ問題を抱えていました。これが私の解決策です(基本的に最初の2つの答えの組み合わせ):

config.yml でサービスを設定します。引数を忘れないでください

services:
    custom_user_manager:
        class: Acme\UserBundle\Model\CustomUserManager
        arguments: [@security.encoder_factory, @fos_user.util.username_canonicalizer, @fos_user.util.email_canonicalizer, @fos_user.entity_manager, Acme\UserBundle\Entity\User]

次に、サービスを FOS user_manager に接続します (config.yml にもあります):

fos_user:
    service:
        user_manager: custom_user_manager

CustomUserManager で、gilden が言ったように、construct-method を思い出してください。

class CustomUserManager extends UserManager{

    public function __construct(EncoderFactoryInterface $encoderFactory, CanonicalizerInterface $usernameCanonicalizer, CanonicalizerInterface $emailCanonicalizer, ObjectManager $om, $class)
    {
        parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer, $om, $class);
    }

}
于 2013-02-20T16:36:27.623 に答える
4

コンストラクター メソッド ( ) を追加し__construct、必要な引数を基本クラスに渡す必要があります。

namespace ChoupsCommerce\UserBundle\Model;

use Doctrine\ORM\EntityManager;
use FOS\UserBundle\Entity\UserManager;
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
use FOS\UserBundle\Util\CanonicalizerInterface;

class MyUserManager extends UserManager
{
    public function __construct(
        EncoderFactoryInterface $encoderFactory,
        CanonicalizerInterface $usernameCanonicalizer,
        CanonicalizerInterface $emailCanonicalizer,
        EntityManager $em,
        $class
    ) {
        parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer, $em, $class);
    }
}
于 2012-03-21T16:34:02.800 に答える
2

申し訳ありませんが、私の英語は下手です。

カスタムマネージャーサービスの引数が間違っている可能性があります

Argument 1 passed to FOS\UserBundle\Entity\UserManager::__construct() must be an instance of Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface, none given, called in

これが私の設定です:

iep_core.iep_user_manager:   
     class: Iep\CoreBundle\Service\IepUserManager
     arguments: [@security.encoder_factory, @fos_user.util.username_canonicalizer, @fos_user.util.email_canonicalizer, @fos_user.entity_manager, Iep\CoreBundle\Entity\User]
于 2012-10-18T03:07:46.097 に答える