1

HWIOAuthBundleで動作するようにセットアップしようとしていFOSUserBundleます。

を拡張する独自のユーザー プロバイダーを作成する際に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).

オーバーライドできるように、サービスの 2 番目のパラメーターとして何を定義すればよいかわかりませんFOSUBUserProvider。私はそれをグーグルで調べてきましたが、私が見つけたのは同じ質問をしている人だけで、答えはありません。

FOSUBUserProvider の署名に準拠するために 2 番目のパラメーターが何でなければならないかを教えてくれる優しい魂に永遠に感謝します。

ありがとうございました。

4

2 に答える 2

1

2 番目の引数はマッピングに使用されます。私が理解しているように、これはエンティティ内の OAuth サービスとフィールドの名前に対応する名前です。

たとえば、次のように送信できます。

naroga.reader.common.security.user_provider:
    class: Naroga\Reader\CommonBundle\Service\Security\NarogaUserProvider
    arguments: [ @fos_user.user_manager, { facebook: facebookId, twitter: twitterId } ]
于 2013-03-19T20:37:34.717 に答える
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]
于 2015-07-13T19:53:18.937 に答える