以下是我正在研究的内容我已经使用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);
}
答案 0 :(得分:2)
你需要使用
$this->getConfigurationPool()->getContainer()->get('security.encoder_factory')
因为容器无法在Admin类中直接访问。
修改强>
如果您想让对象直接可用于您的代码(例如$this->container
),那么您可以执行以下操作:
在您的管理类
中添加protected $container
在您的管理类中添加configure
方法:
获取容器,并将其分配给$container
public function configure() {
$this->container = $this->getConfigurationPool()->getContainer();
}
<强>利润!强>