0 follower

Final Class Yiisoft\Yii\Cycle\Factory\OrmFactory

InheritanceYiisoft\Yii\Cycle\Factory\OrmFactory

The factory for the ORM Factory {@see FactoryInterface}.

Psalm Types

Name Value
CollectionsConfig array{default?: string|null, factories?: array<non-empty-string, class-string<\Cycle\ORM\Collection\CollectionFactoryInterface>>}

Method Details

Hide inherited methods

__construct() public method

public mixed __construct ( array $collectionsConfig )
$collectionsConfig array

                public function __construct(private array $collectionsConfig)
{
}

            
__invoke() public method

public \Cycle\ORM\FactoryInterface __invoke ( \Cycle\Database\DatabaseManager $dbal, \Spiral\Core\FactoryInterface $factory, \Yiisoft\Injector\Injector $injector )
$dbal \Cycle\Database\DatabaseManager
$factory \Spiral\Core\FactoryInterface
$injector \Yiisoft\Injector\Injector
throws Yiisoft\Yii\Cycle\Exception\ConfigException

                public function __invoke(
    DatabaseManager $dbal,
    SpiralFactoryInterface $factory,
    Injector $injector,
): FactoryInterface {
    // Manage collection factory list
    $cfgPath = ['yiisoft/yii-cycle', 'collections'];
    try {
        // Resolve collection factories
        $factories = [];
        foreach ($this->collectionsConfig['factories'] ?? [] as $alias => $definition) {
            $factories[$alias] = $injector->make($definition);
            if (!$factories[$alias] instanceof CollectionFactoryInterface) {
                $cfgPath[] = 'factories';
                throw new BadDeclarationException(
                    "Collection factory `$alias`",
                    CollectionFactoryInterface::class,
                    $factories[$alias]
                );
            }
        }
        // Resolve default collection factory
        $default = $this->collectionsConfig['default'] ?? null;
        if ($default !== null) {
            if (!\array_key_exists($default, $factories)) {
                if (!\is_a($default, CollectionFactoryInterface::class, true)) {
                    $cfgPath[] = 'default';
                    throw new RuntimeException(\sprintf('Default collection factory `%s` not found.', $default));
                }
                $default = $injector->make($default);
            } else {
                $default = $factories[$default];
            }
        }
    } catch (\Throwable $e) {
        throw new ConfigException($cfgPath, $e->getMessage());
    }
    $result = new Factory($dbal, null, $factory, $default);
    // attach collection factories
    foreach ($factories as $alias => $collectionFactory) {
        $result = $result->withCollectionFactory($alias, $collectionFactory);
    }
    return $result;
}