Final Class Yiisoft\Yii\Cycle\Factory\OrmFactory
| Inheritance | Yiisoft\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>>} |
Public Methods
| Method | Description | Defined By |
|---|---|---|
| __construct() | Yiisoft\Yii\Cycle\Factory\OrmFactory | |
| __invoke() | Yiisoft\Yii\Cycle\Factory\OrmFactory |
Method Details
| public mixed __construct ( array $collectionsConfig ) | ||
| $collectionsConfig | array | |
public function __construct(private array $collectionsConfig)
{
}
| 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;
}
Signup or Login in order to comment.