Создать пользователя с помощью ФОС набор пользователей для определенных типов пользователей


Вот над чем я работаю я определил пользовательские типы пользователей с помощью пользовательского пакета 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 3

1 ответ:

Вам нужно использовать

$this->getConfigurationPool()->getContainer()->get('security.encoder_factory') поскольку контейнер не доступен непосредственно в классе Admin.

EDIT

Если вы хотите, чтобы объект был доступен непосредственно вашему коду (например, $this->container), то вы можете сделать следующее:

Добавьте protected $container в свой класс администратора

Добавьте метод configure в свой класс администратора:

Принесите контейнер и назначьте его $container

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

Прибыль!