gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:11:15 26 4
gpt4 key购买 nike

这就是我正在做的事情我已经使用 FOS 用户包定义了自定义用户类型也使用 sonata admin 包,我已经成功地为 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 文件夹下的主 congig.yml 中导入了上面的 yml,在创建用户时我希望我的安全编码器散列接收到的纯密码(创建/编辑用户),在主 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 ),那么您可以执行以下操作:

在你的管理类中添加一个protected $container

在你的管理类中添加一个configure方法:

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

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

利润!

关于php - 使用 FOS 用户包为自定义用户类型创建用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19135335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com