使用FOS用户包为自定义用户类型创建用户

时间:2013-10-02 10:56:01

标签: php symfony fosuserbundle sonata-admin

以下是我正在研究的内容我已经使用Sonata管理包使用FOS用户包定义了自定义用户类型,我已成功为admin config.yml创建了服务,还在我的自定义中生成了fos用户实体捆绑

sonata.admin.hrmanagement:
    class: Namespace\Mybundlename\Admin\MyAdminClass
    tags:
        - { name: sonata.admin, manager_type: orm, group: "Content", label: "My user type" }
    arguments: [null, Namespace\Mybundlename\Entity\FosUser, ~]
    calls:
        - [ setTranslationDomain, [NamespaceMybundlenameBundle]]

我在app cong文件夹下的main congig.yml中导入了yml,创建用户时我想让我的安全编码器散列收到的普通密码(创建/编辑用户),在main security.yml中成功定义了安全编码器喜欢

security:
    encoders:
       Namespace\Mybundlename\Entity\FosUser: sha512

现在在MyAdminClass我有更新前和更新后的过滤器如何访问我实体的上面定义的安全编码器

public function preUpdate($object)
{
   $salt = md5(time());
   $encoderservice = $this->get('security.encoder_factory');// here is the problem i can't access
   $encoder = $encoderservice->getEncoder($object);
   $encoded_pass = $encoder->encodePassword($object->getPassword(),$salt );             
   $object->setSalt($salt);

}

1 个答案:

答案 0 :(得分:2)

你需要使用

$this->getConfigurationPool()->getContainer()->get('security.encoder_factory')因为容器无法在Admin类中直接访问。

修改

如果您想让对象直接可用于您的代码(例如$this->container),那么您可以执行以下操作:

在您的管理类

中添加protected $container

在您的管理类中添加configure方法:

获取容器,并将其分配给$container

public function configure() {
    $this->container = $this->getConfigurationPool()->getContainer();
}

<强>利润!