我尝试根据这个link扩展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
我的用户管理器:
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;
}
}
最佳答案
我有同样的问题,这是我的解决方案(基本上是前两个答案的组合):
在 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 所说:
class CustomUserManager extends UserManager{
public function __construct(EncoderFactoryInterface $encoderFactory, CanonicalizerInterface $usernameCanonicalizer, CanonicalizerInterface $emailCanonicalizer, ObjectManager $om, $class)
{
parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer, $om, $class);
}
}
关于symfony - 使用 FOSUserBundle 在 Symfony2 中扩展 UserManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9806379/