Создайте пользователя с помощью пакета пользователей 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);
}
1 answers
Вам нужно использовать
$this->getConfigurationPool()->getContainer()->get('security.encoder_factory')
поскольку контейнер не доступен напрямую в классе администратора.
РЕДАКТИРОВАТЬ
Если вы хотите, чтобы объект был доступен непосредственно в вашем коде (например, $this->container
), вы можете сделать следующее:
Добавьте protected $container
в свой класс администратора
Добавьте метод configure
в свой класс администратора:
Извлеките контейнер и назначьте его $container
public function configure() {
$this->container = $this->getConfigurationPool()->getContainer();
}
Прибыль!