mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-06 14:19:23 +08:00
Fix #20332: Added support for the '__class' key in \yii\di\Instance:eunsure(['__class' => ...])
This commit is contained in:
@ -34,6 +34,7 @@ Yii Framework 2 Change Log
|
||||
- Chg #20276: Removed autogenerated migration phpdoc (userator)
|
||||
- New #20185: Add `BackedEnum` support to `AttributeTypecastBehavior` (briedis)
|
||||
- New #20279: Add to the `\yii\web\Request` CSRF validation by custom HTTP header (olegbaturin)
|
||||
- New #20332: Added support for the '__class' key in `\yii\di\Instance:eunsure(['__class' => ...])` (LAV45)
|
||||
|
||||
|
||||
2.0.51 July 18, 2024
|
||||
|
@ -118,11 +118,18 @@ class Instance
|
||||
public static function ensure($reference, $type = null, $container = null)
|
||||
{
|
||||
if (is_array($reference)) {
|
||||
$class = isset($reference['class']) ? $reference['class'] : $type;
|
||||
if (!$container instanceof Container) {
|
||||
$container = Yii::$container;
|
||||
}
|
||||
unset($reference['class']);
|
||||
if (isset($reference['__class'])) {
|
||||
$class = $reference['__class'];
|
||||
unset($reference['__class'], $type['class']);
|
||||
} elseif (isset($reference['class'])) {
|
||||
$class = $reference['class'];
|
||||
unset($reference['class']);
|
||||
} else {
|
||||
$class = $type;
|
||||
}
|
||||
$component = $container->get($class, [], $reference);
|
||||
if ($type === null || $component instanceof $type) {
|
||||
return $component;
|
||||
|
@ -97,6 +97,7 @@ class InstanceTest extends TestCase
|
||||
$this->assertInstanceOf(Connection::className(), Instance::ensure('db'));
|
||||
$this->assertInstanceOf(Connection::className(), Instance::ensure(new Connection()));
|
||||
$this->assertInstanceOf(Connection::className(), Instance::ensure(['class' => 'yii\db\Connection', 'dsn' => 'test']));
|
||||
$this->assertInstanceOf(Connection::className(), Instance::ensure(['__class' => 'yii\db\Connection', 'dsn' => 'test']));
|
||||
Yii::$container = new Container();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user