Ako zapisat v extension sluzbu ktora bude vracat innu sluzbu?

duskohu
Člen | 778
+
0
-

Ahojte ako by sa dalo toto zapisat v extension?

services:
    oauth2.google.factory:
        create: Nas\UserModule\DI\GoogleProviderFactory(%google.clientId%, %google.clientSecret%)
        autowired: false

    oauth2.google:
        type: League\OAuth2\Client\Provider\Google
        create: @oauth2.google.factory::create()
Felix
Nette Core | 1258
+
0
-

Ahoj @duskohu, mrkni na tento clanek (https://f3l1x.io/…ovat-sluzby/).

duskohu
Člen | 778
+
0
-

Dik @Felix pomohlo:

        // GoogleProviderFactory
        $builder->addDefinition($this->prefix('googleProviderFactory'))
            ->setFactory(
                GoogleProviderFactory::class,
                [$this->config['google']['clientId'], $this->config['google']['clientSecret']]
            )
            ->setAutowired(false);

        $builder->addDefinition('googleOauth2')
            ->setFactory('@' . $this->prefix('googleProviderFactory') . '::create');
duskohu
Člen | 778
+
0
-

Da sa toto upravit aby mi stale prisla nova instancia GoogleClient?

            // GoogleClientFactory
            $builder->addDefinition($this->prefix('googleClientFactory'))
                ->setFactory(
                    GoogleClientFactory::class,
                    [$this->config['google']['clientId'], $this->config['google']['clientSecret']]
                )
                ->setAutowired(false);

            $builder->addDefinition('googleClient')
                ->setFactory('@' . $this->prefix('googleClientFactory') . '::create');
class GoogleClientFactory
{
    /** @var string */
    private $clientId;

    /** @var string */
    private $clientSecret;

    /**
     * @param string $clientId
     * @param string $clientSecret
     */
    public function __construct(
        string $clientId,
        string $clientSecret
    ) {
        $this->clientId = $clientId;
        $this->clientSecret = $clientSecret;
    }

    public function create(): GoogleClient
    {
        return new GoogleClient([
            'client_id' => $this->clientId,
            'client_secret' => $this->clientSecret
        ]);
    }
}
David Matějka
Moderator | 6445
+
+2
-

Kam aby vždy přišla nová instance? jako do každé služby, která GoogleClient vyžaduje? ne, to nejde – respektive můžeš vždy registrovat novou službu (nebo to ani neregistrovat jako službu, ale vytvořit ji inline) nebo si předávat tu factory

duskohu
Člen | 778
+
0
-

David Matějka napsal(a):

Kam aby vždy přišla nová instance? jako do každé služby, která GoogleClient vyžaduje? ne, to nejde – respektive můžeš vždy registrovat novou službu (nebo to ani neregistrovat jako službu, ale vytvořit ji inline) nebo si předávat tu factory

@DavidMatějka Dakujem, „předávat tu factory“ je riesenie, dakujem