mougrim / yii2-container-configurator
该软件包已被废弃,不再维护。未建议替代软件包。
Yii2 容器配置器
v0.0.1
2015-07-17 06:54 UTC
Requires
- php: >=5.4.0
- yiisoft/yii2: *
Requires (Dev)
- phpunit/phpunit: 4.*
This package is auto-updated.
Last update: 2024-08-29 17:15:56 UTC
README
如果您想维护它,您可以创建一个分支。
Yii 2 容器配置器扩展
此扩展可以使用简单的PHP数组配置yii2的容器,并使用延迟加载。
有关许可证信息,请参阅LICENSE文件。
安装
安装此扩展的首选方式是通过composer。
运行以下命令:
php composer.phar require --prefer-dist mougrim/yii2-container-configurator
或者
"mougrim/yii2-container-configurator": "*"
将以下内容添加到您的composer.json文件的require部分:
编辑文件config/main.php
<?php use mougrim\yii2ContainerConfigurator\ContainerConfigurator; use yii\di\Container; ... Yii::$container->set( 'containerConfigurator', function (Container $container) { $containerConfigurator = new ContainerConfigurator($container); $containerConfigurator->configure(require __DIR__ . '/container.php'); // di container config path return $containerConfigurator; } ); ... return [ ... 'bootstrap' => [ ... 'containerConfigurator' ], 'components' => [ 'containerConfigurator' => 'containerConfigurator', ... ], ];
并创建config/container.php
<?php return [ // your di container config ]
使用方法
回调
您可以在容器配置中使用回调
<?php return [ 'app' => function () { return Yii::$app; }, ];
此回调将在所有get调用中调用
Yii::$container->get('app');
服务
默认情况下,组件作为服务创建,即在第一次get时创建一次
<?php use yii\web\Response; return [ 'front.response' => [ 'class' => Response::class, // class name ], ];
原型
如果您希望每次get都创建新实例,可以使用原型
<?php use yii\web\Response; use mougrim\yii2ContainerConfigurator\ContainerConfigurator; return [ 'front.response' => [ 'class' => Response::class, // class name 'type' => ContainerConfigurator::COMPONENT_TYPE_PROTOTYPE, ], ];
别名
如果您想添加服务或原型的别名
<?php use yii\web\Response; use mougrim\yii2ContainerConfigurator\ContainerConfigurator; return [ 'front.response' => [ 'class' => Response::class, // class name ], 'front.response-alias' => 'front.response', ];
现在这是
<?php Yii::$container->get('front.response-alias');
相当于这是
<?php Yii::$container->get('front.response');
参数格式
参数类型参考
如果您想从di注入,可以使用参数类型参考
[ 'id' => 'front.request', 'type' => ContainerConfigurator::ARGUMENT_TYPE_REFERENCE, ]
参数类型值
如果您想注入一些值,可以使用参数类型值
[ 'type' => ContainerConfigurator::ARGUMENT_TYPE_VALUE, 'value' => 'some value', ],
传递参数到构造函数
如果您想将参数传递到构造函数,可以使用'arguments'
<?php use frontend\controllers\SiteController; use mougrim\yii2ContainerConfigurator\ContainerConfigurator; return [ 'controllers.site' => [ 'class' => SiteController::class, 'arguments' => [ 2 => [ // argument number 'id' => 'front.request', 'type' => ContainerConfigurator::ARGUMENT_TYPE_REFERENCE, ], ], ], ];
SiteController
<?php namespace frontend\controllers; use yii\base\Module; use yii\web\Controller use yii\web\Request; class SiteController extends Controller { private $request; public function __construct( $id, Module $module, Request $request, array $config = [] ) { parent::__construct($id, $module, $config); $this->request = $request; } }
并在config/main.php中的控制器映射中添加
... 'controllerMap' => [ ... 'site' => 'controllers.site', ], ...
设置属性
如果您想设置属性,可以使用'properties'
<?php use frontend\controllers\SiteController; use mougrim\yii2ContainerConfigurator\ContainerConfigurator; return [ 'controllers.site' => [ 'class' => SiteController::class, 'properties' => [ 'request' => [ 'id' => 'front.request', 'type' => ContainerConfigurator::ARGUMENT_TYPE_REFERENCE, ], ], ], ];
调用回调
如果您想调用回调,可以使用'call',但在yii对象(从\yii\base\Object扩展)中,回调将在方法init之后调用
<?php use frontend\controllers\SiteController; use mougrim\yii2ContainerConfigurator\ContainerConfigurator; return [ 'controllers.site' => [ 'class' => SiteController::class, 'call' => [ 'setRequest' => [ [ 'id' => 'front.request', 'type' => ContainerConfigurator::ARGUMENT_TYPE_REFERENCE, ], ], ], ], ];
扩展
如果您想扩展配置,可以使用'extends'
<?php use frontend\controllers\SiteController; use mougrim\yii2ContainerConfigurator\ContainerConfigurator; return [ 'components.controller' => [ 'type' => ContainerConfigurator::COMPONENT_TYPE_PROTOTYPE, 'properties' => [ 'app' => [ 'id' => 'app', 'type' => ContainerConfigurator::ARGUMENT_TYPE_REFERENCE, ], ], ], 'controllers.site' => [ 'class' => SiteController::class, 'extends' => 'components.controller', 'arguments' => [ 2 => [ 'id' => 'front.request', 'type' => ContainerConfigurator::ARGUMENT_TYPE_REFERENCE, ], ], ], ];