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 | 1245
+
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