2013-10-02 2 views
3

Вот что я работаю над тем, что я определил пользовательские типы пользователей с помощью пакета FOS для пользователей, также используя пакет sonata admin bundle, я успешно создал службы для администратора 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 в главном congig.yml в папке приложения, при создании пользователя я хочу, чтобы мой кодер безопасности хэш принятого простой пароля (создание/редактирование пользователь), успешно определил защитный кодер в основном 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

является 'preUpdate (...)' метод, который вы пытаетесь использовать, и он работает не так, как ожидалось, или какая именно проблема здесь? – nifr

+0

Проблема в том, что я не могу получить свой определенный 'security.encoder_factory' –

ответ

2

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

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

EDIT

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

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

надстройку a configure в вашем классе администратора:

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

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

Прибыль!

+0

Спасибо за ваш ответ, есть ли способ получить доступ к контейнеру непосредственно в моем классе администратора? –

+1

да и нет, контейнерный объект напрямую недоступен в классе администратора, но я могу понять вашу проблему, к счастью, есть простой способ сделать это :) Я отправлю код в ближайшее время – Shaheer

Смежные вопросы