Yii

来源:互联网 发布:压缩空气管道计算软件 编辑:程序博客网 时间:2024/06/03 19:57

yii 中组件只有在被调用的时候才会被实例化,且在当前请求中之后调用该组件只会使用上一次实例化的实例,不会重新生成该实例。

'components'    =>  array(    '组件调用名'   =>   '组件调用命名空间',    '组件调用名'   =>  array(            'class'  =>  '组件调用命名空间'    );    '组件调用名'   => function(){        return new '组件调用命名空间';    })

一个类似的小组件,可以实现上述功能。方便我们存储服务功能组件。

<?phpnamespace app\components\Services;/** * 自定义服务层调用组件 * 支持 的实例模式只有yii模式的string 和 array 模式 * 例子 * services => array( *      'customService' =>  array(*               'class' =>  'app\components\Custom\Custom',*               'name'  =>  '我是勇哥'*           ), * ) */class Services{    private $dataObj = array();    private $classes = array();    public function __set($name,$value)    {        $this->classes[$name] = $value;    }    public function __get($name)    {        if(!isset($this->dataObj[$name]) || $this->dataObj[$name] == null)        {            $classInfo = $this->classes[$name];            $this->dataObj[$name] = is_array($classInfo) ? (new $classInfo['class']) : (new $classInfo);            if(is_array($classInfo))                foreach($classInfo as $a=>$b)                    if($a != 'class')                        $this->dataObj[$name]->$a = $b;        }        return $this->dataObj[$name];    }}

web.php

'components'=>array(    'services'  =>  array(        'class'   =>   'app\components\Services\Services',        //自定义服务 custom1        'custom1Service' => array(            'class'  =>  'app\services\Custom1\Custom1',            //需要注入的属性值            'name'   => '我是勇哥',            'age'    => 22        ),        //自定义服务 custom2        'custom2Service' => array(            'class'  =>  'app\services\Custom2\Custom2',            //需要注入的属性值            'name'   => '我是勇哥',            'age'    => 22        ),    ))

控制层调用

<?phpnamespace app\controllers\home;use Yii;use yii\web\Controller;class IndexController extends Controller{    public function actionIndex()    {        echo Yii::$app->services->custom1Service->name;    }}
原创粉丝点击