ProviderRegistry::registerProvider( WordPressAiClientProvidersclass-string $className )

In this article

Registers a provider class with the registry.

Parameters

$className<span class="WordPressAiClientProvidersclass-string”>WordPressAiClientProvidersclass-stringrequired
The fully qualified provider class name implementing the ProviderInterface

Source

public function registerProvider(string $className): void
{
    if (!class_exists($className)) {
        throw new InvalidArgumentException(sprintf('Provider class does not exist: %s', $className));
    }
    // Validate that class implements ProviderInterface
    if (!is_subclass_of($className, ProviderInterface::class)) {
        throw new InvalidArgumentException(sprintf('Provider class must implement %s: %s', ProviderInterface::class, $className));
    }
    $metadata = $className::metadata();
    if (!$metadata instanceof ProviderMetadata) {
        throw new InvalidArgumentException(sprintf('Provider must return ProviderMetadata from metadata() method: %s', $className));
    }
    // If there is already a HTTP transporter instance set, hook it up to the provider as needed.
    try {
        $httpTransporter = $this->getHttpTransporter();
    } catch (RuntimeException $e) {
        /*
         * If this fails, it's okay. There is no defined sequence between setting the HTTP transporter in the
         * registry and registering providers in it, so it might be that the transporter is set later. It will be
         * hooked up then.
         * But for now we can ignore this exception and attempt to set the default HTTP transporter, if possible.
         */
        try {
            $this->setHttpTransporter(HttpTransporterFactory::createTransporter());
            $httpTransporter = $this->getHttpTransporter();
        } catch (DiscoveryNotFoundException $e) {
            /*
             * If no HTTP client implementation can be discovered yet, we can ignore this for now.
             * It might be set later, so it's not a hard error at this point.
             * We'll try again the next time a provider is registered, or maybe by that time an explicit
             * HTTP transporter will have been set.
             */
        }
    }
    if (isset($httpTransporter)) {
        $this->setHttpTransporterForProvider($className, $httpTransporter);
    }
    // Hook up the request authentication instance, using a default if not set.
    if (!isset($this->providerAuthenticationInstances[$className])) {
        $defaultProviderAuthentication = $this->createDefaultProviderRequestAuthentication($className);
        if ($defaultProviderAuthentication !== null) {
            $this->providerAuthenticationInstances[$className] = $defaultProviderAuthentication;
        }
    }
    if (isset($this->providerAuthenticationInstances[$className])) {
        $this->setRequestAuthenticationForProvider($className, $this->providerAuthenticationInstances[$className]);
    }
    $this->registeredIdsToClassNames[$metadata->getId()] = $className;
    $this->registeredClassNamesToIds[$className] = $metadata->getId();
}

Changelog

VersionDescription
0.1.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.