Final Class Yiisoft\Yii\Cycle\Factory\OrmFactory
| Inheritance | Yiisoft\ |
|---|
The factory for the ORM Factory {@see FactoryInterface}.
Public Methods
| Method | Description | Defined By |
|---|---|---|
| __construct() | Yiisoft\ |
|
| __invoke() | Yiisoft\ |
Method Details
| public mixed __construct ( array $collectionsConfig ) | ||
| $collectionsConfig | array | |
public function __construct(private array $collectionsConfig) {}
| public \ | ||
| $dbal | \ |
|
| $factory | \ |
|
| $injector | \ |
|
| throws | Yiisoft\ |
|
|---|---|---|
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;
}
User Contributed Notes
Leave a comment
Join the conversation to share a note.