Создайте пользователя с помощью пакета пользователей FOS для пользовательского определенного типа пользователя


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

Я импортировал выше yml в основной файл конфигурации.yml в папке приложения, при создании пользователя я хочу, чтобы кодировщик безопасности my хэшировал полученный простой пароль (создание/редактирование пользователя), успешно определил кодировщик безопасности в главном 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);

}
Author: M Khalid Junaid, 2013-10-02

1 answers

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

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

РЕДАКТИРОВАТЬ

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

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

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

Извлеките контейнер и назначьте его $container

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

Прибыль!

 2
Author: Shaheer, 2013-10-02 11:22:51