Skip to content

Commit dbb82a2

Browse files
authored
Fix #20332: Added support for the '__class' key in \yii\di\Instance:eunsure(['__class' => ...])
1 parent 53ce354 commit dbb82a2

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

framework/CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Yii Framework 2 Change Log
3434
- Chg #20276: Removed autogenerated migration phpdoc (userator)
3535
- New #20185: Add `BackedEnum` support to `AttributeTypecastBehavior` (briedis)
3636
- New #20279: Add to the `\yii\web\Request` CSRF validation by custom HTTP header (olegbaturin)
37+
- New #20332: Added support for the '__class' key in `\yii\di\Instance:eunsure(['__class' => ...])` (LAV45)
3738

3839

3940
2.0.51 July 18, 2024

framework/di/Instance.php

+9-2
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,18 @@ public static function of($id, $optional = false)
118118
public static function ensure($reference, $type = null, $container = null)
119119
{
120120
if (is_array($reference)) {
121-
$class = isset($reference['class']) ? $reference['class'] : $type;
122121
if (!$container instanceof Container) {
123122
$container = Yii::$container;
124123
}
125-
unset($reference['class']);
124+
if (isset($reference['__class'])) {
125+
$class = $reference['__class'];
126+
unset($reference['__class'], $type['class']);
127+
} elseif (isset($reference['class'])) {
128+
$class = $reference['class'];
129+
unset($reference['class']);
130+
} else {
131+
$class = $type;
132+
}
126133
$component = $container->get($class, [], $reference);
127134
if ($type === null || $component instanceof $type) {
128135
return $component;

tests/framework/di/InstanceTest.php

+1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ public function testEnsure_MinimalSettings()
9797
$this->assertInstanceOf(Connection::className(), Instance::ensure('db'));
9898
$this->assertInstanceOf(Connection::className(), Instance::ensure(new Connection()));
9999
$this->assertInstanceOf(Connection::className(), Instance::ensure(['class' => 'yii\db\Connection', 'dsn' => 'test']));
100+
$this->assertInstanceOf(Connection::className(), Instance::ensure(['__class' => 'yii\db\Connection', 'dsn' => 'test']));
100101
Yii::$container = new Container();
101102
}
102103

0 commit comments

Comments
 (0)