Создать пользователя с помощью ФОС набор пользователей для определенных типов пользователей
Вот над чем я работаю я определил пользовательские типы пользователей с помощью пользовательского пакета FOS также с помощью пакета Sonata admin, я успешно создал службы для admin config.yml
, а также сгенерировал пользовательскую сущность fos в моем пользовательском пакете
sonata.admin.hrmanagement:
class: NamespaceMybundlenameAdminMyAdminClass
tags:
- { name: sonata.admin, manager_type: orm, group: "Content", label: "My user type" }
arguments: [null, NamespaceMybundlenameEntityFosUser, ~]
calls:
- [ setTranslationDomain, [NamespaceMybundlenameBundle]]
Я импортировал выше yml в main congig.yml в папке app, при создании пользователя я хочу, чтобы мой кодер безопасности хэшировал полученный простой пароль (создание / редактирование пользователя), успешно определил кодер безопасности в main безопасность.yml как
security:
encoders:
NamespaceMybundlenameEntityFosUser: 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 ответ:
Вам нужно использовать
$this->getConfigurationPool()->getContainer()->get('security.encoder_factory')
поскольку контейнер не доступен непосредственно в классе Admin.EDIT
Если вы хотите, чтобы объект был доступен непосредственно вашему коду (например,
$this->container
), то вы можете сделать следующее:Добавьте
protected $container
в свой класс администратораДобавьте метод
configure
в свой класс администратора:Принесите контейнер и назначьте его
$container
public function configure() { $this->container = $this->getConfigurationPool()->getContainer(); }
Прибыль!