2013-03-15 6 views
1

Я пытаюсь настроить HWIOAuthBundle на работу с FOSUserBundle.HWIOAuthBundle пользовательские аргументы поставщика услуг

Делая свой собственный пользовательский провайдер, который расширяет FOSUBUserProvider, я сделал следующее:

namespace Naroga\Reader\CommonBundle\Service\Security; 

use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider; 
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface; 

class NarogaUserProvider extends FOSUBUserProvider { 

    public function loadUserByOAuthUserResponse(UserResponseInterface $response) { 

     [...] 

    } 

} 

Мой services.yml выглядит следующим образом:

naroga.reader.common.security.user_provider: 
    class: Naroga\Reader\CommonBundle\Service\Security\NarogaUserProvider 
    arguments: [ @fos_user.user_manager ] 

Всякий раз, когда я запускаю программу, я получаю следующее сообщение об ошибке:

Argument 2 passed to HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider::__construct() must be of the type array, none given, called in

Это имеет большое значение, потому что подпись FOSUBUserProvider::__construct - public function __construct(UserManagerInterface $userManager, array $properties).

Я понятия не имею, как определить свой второй параметр для моей службы, чтобы он мог переопределить FOSUBUserProvider. Я искал его, и все, что я нахожу, это люди с тем же вопросом, без ответов.

Я был бы всегда благодарен нежной душе, которая говорит мне, какой должен быть второй параметр, чтобы соответствовать сигнатуре FOSUBUserProvider.

спасибо.

ответ

1

Второй аргумент используется для сопоставления. Как я понимаю, это имя, соответствующее службе OAuth и имя поля в вашей организации.

Например, вы можете отправить их следующим образом:

naroga.reader.common.security.user_provider: 
    class: Naroga\Reader\CommonBundle\Service\Security\NarogaUserProvider 
    arguments: [ @fos_user.user_manager, { facebook: facebookId, twitter: twitterId } ] 
1

В случае, если Вы хотели бы передать также некоторые дополнительные аргументы, скажем, огонь событие с помощью диспетчера, который был мой случай, просто переписать конструктор.

use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseClass; 

FOSUBUserProvider extends BaseClass 
{ 
    /** 
    * @var EventDispatcherInterface 
    */ 
    private $eventDispatcher; 

    /** 
    * Constructor. 
    * 
    * @param UserManagerInterface $userManager FOSUB user provider. 
    * @param array $properties Property mapping. 
    * @param EventDispatcherInterface $eventDispatcher 
    */ 
    public function __construct(
     UserManagerInterface $userManager, 
     array $properties, 
     EventDispatcherInterface $eventDispatcher) 
    { 
     $this->userManager  = $userManager; 
     $this->properties  = array_merge($this->properties, $properties); 
     $this->accessor  = PropertyAccess::createPropertyAccessor(); 
     $this->eventDispatcher = $eventDispatcher; 
    } 

И определение услуг:

tb_user_provider: 
    class: "%tb_user_provider.class%" 
    arguments: [@fos_user.user_manager, { facebook: facebook_id }, @event_dispatcher]