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

Php 使用自定义用户类型的FOS用户包创建用户,php,symfony,fosuserbundle,sonata-admin,Php,Symfony,Fosuserbundle,Sonata Admin,这是我正在做的工作。我已经使用FOS用户包定义了自定义用户类型,也使用了sonata管理包,我已经成功地为adminconfig.yml创建了服务,还在我的自定义包中生成了FOS用户实体 sonata.admin.hrmanagement: class: Namespace\Mybundlename\Admin\MyAdminClass tags: - { name: sonata.admin, manager_type: orm, group: "Content

这是我正在做的工作。我已经使用FOS用户包定义了自定义用户类型,也使用了sonata管理包,我已经成功地为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文件夹下的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);

}
你需要使用

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

编辑

如果希望对象直接可用于代码(如
$this->container
),则可以执行以下操作:

在admin类中添加一个受保护的$container

在管理类中添加
configure
方法:

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

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

利润

预更新(…)
您正在尝试使用的方法,但它没有按预期工作,或者这里的确切问题是什么?问题是我无法获得定义的
安全性。编码器工厂
感谢您的回答有没有办法直接在管理类中访问容器?是和否,容器对象在Admin类中无法直接访问,但我可以理解您的问题,幸运的是有一种简单的方法可以做到这一点:)我将很快发布代码