亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

YII2依賴注入和事件的使用

2020-03-22 17:42:36
字體:
來源:轉載
供稿:網友
  • YII2的核心就是依賴注入和事件處理,同Spring的IOC和AOP功能基本是一樣的,YII的依賴注入可以使得我們使用對象的時候,YII的容器幫助我們創建大大提高了效率,并且,一部分又提高的內存的使用率,如果我們自己控制對象,可能過程中會浪費不必要的內容空間,YII的事件,就好比AOP,AOP我做java開發的時候最多是對日志的控制,和事物的控制,還有權限。YII的事件同樣可以實現這些。

    eg:

    IOC又稱DI(依賴注入)

    首先:我在frontend文件夾下面創建了service文件夾來存放創建的自定義接口和接口的實現類。

    IUserService.php

    <?phpnamespace frontendservice;	/**	 * 用戶業務邏輯接口	 */    interface IUserService{    	html' target='_blank'>public function getAllUsers();    	    	public function getUserById($id);    } 

    IUserServiceimpl.php 接口實現類

    <?php namespace frontendservice;use frontendmodelsUser;use yiiaseObject;	/**	 *用戶業務邏輯實現	 *實現用戶業務邏輯接口	 * 	 */   class IUserServiceimpl extends Object implements IUserService{		 public function __construct()		    {		      		        parent::__construct();		    }   		public function getAllUsers(){   			//$list = User::find()->asArray()->all();   			//$user = new User();   			$list = User::getInstance()->getAllUsers();   			return $list ? $list : [];   		}   		public function getUserById($id){   				return User::findOne($id);   		}   }

    Model層User.php

    <?php namespace frontendmodels;use yiiaseModel;use yiidbActiveRecord;use Yii;use frontendmodelsOrder;use yiiwebIdentifyInterface;      class User extends ActiveRecord      {        // 第一步:定義自己的事件        const EVENT_BEFORE_MARK_QUERY = 'beforeMarkDelete';        const EVENT_AFTER_MARK_QUERY = 'afterMarkDelete';               // 第一步:在初始化階段綁定事件和Event Handler        public function init()        {            parent::init();            $this->trigger(self::EVENT_INIT);            // 完成綁定            $this->on(self::EVENT_BEFORE_MARK_QUERY, [$this, 'onBeforeMarkQuery']);            $this->on(self::EVENT_AFTER_MARK_QUERY,[$this,'onAfterMarkQuery']);        }        // 第二步:定義Event Handler        public function onBeforeMarkQuery () {                         echo "我在查詢之前進行了攔截"."<br>";             //exit;        }        // 第二步:定義Event Handler        public function onAfterMarkQuery () {                        echo "查詢完了,想返回數據,別想,數據就在上面,去拿吧";            exit;        }         /**         * 獲取所有用戶信息         */        public  function getAllUsers(){            // 觸發事件            $this->trigger(self::EVENT_BEFORE_MARK_QUERY);            $list = static::find()->asArray()->all();            echo "<pre>";            print_r($list);            $this->trigger(self::EVENT_AFTER_MARK_QUERY);                   }        /**         * 實例化User對象         * @return User         */        public static function getInstance(){                return new self;        }         /**         * 返回表名         */        public static function tabName(){             return 'user';        }        /**         * 返回當前的數據庫連接信息         */        public static function getDBInfo(){            return parent::getDb();        }        }
    接下來對接口的實現進行配置:

    在入口文件index.php里面配置

    <?phpdefined('YII_DEBUG') or define('YII_DEBUG', true);defined('YII_ENV') or define('YII_ENV', 'dev');require(__DIR__ . '/../../vendor/autoload.php');require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');require(__DIR__ . '/../../common/config/bootstrap.php');require(__DIR__ . '/../config/bootstrap.php');$config = yiihelpersArrayHelper::merge(    require(__DIR__ . '/../../common/config/main.php'),    require(__DIR__ . '/../../common/config/main-local.php'),    require(__DIR__ . '/../config/main.php'),    require(__DIR__ . '/../config/main-local.php'));// 注冊一個接口Yii::$container->set('frontend/service/IUserService', 'frontend/service/IUserServiceimpl');// 注冊一個別名Yii::$container->set('userservice','frontend/service/IUserService');//定義路徑別名Yii::setAlias('@getuser' , 'index.php?r=face/getusers ');//加載配置文件	 				$application = new yiiwebApplication($config);$application->run();

    創建一個控制器,來測試:

    <?php namespace frontendcontrollers;use Yii;use frontendserviceIUserService;use yiiwebController;use yiidiContainer;use yiihelpersArrayHelper;use frontendmodelsUserForm;	 class FaceController extends Controller{	 		private  $userService;	 		public function __construct($id, $module,$config = []){	 				//DI容器獲取實例化的對象	 				//$this->userService = Yii::$container->get('userservice');	 				//Service Locator通過 Yii::createObject() 來獲取實例, 而這個 Yii::createObject() 	 				//是調用了DI容器的 yiidiContainer::get() 來向 Yii::$container 索要實例的。	 				// 因此,Service Locator最終是通過DI容器來創建、獲取實例的。	 				$this->userService = Yii::createObject('userservice');	 				parent::__construct($id, $module,$config);	 		}			/**		     * @inheritdoc		     */    		    public function actions()		    {		        return [		            'error' => [		                'class' => 'yiiwebErrorAction',		            ],		            'captcha' => [		                'class' => 'yiicaptchaCaptchaAction',		                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,		            ],		        ];		    }		    /**		     * 獲取所有用戶		     * 		     */	 	     public function actionGetusers(){	 				$list = $this->userService->getAllUsers();	 				echo "<pre>";	 				print_r($list);	 				exit;	 		}	 		public function actionGetuserbyid(){	 			$user = $this->userService->getUserById('2');	 			$user = ArrayHelper::toArray($user);	 			echo "<pre>";	 			print_r($user);	 			exit;	 		} 		}


    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    在线电影av不卡网址| 亚洲区免费影片| 国产精品高潮呻吟视频| 欧美最猛性xxxxx(亚洲精品)| 欧美中文字幕精品| 红桃av永久久久| 精品国产91乱高清在线观看| 另类专区欧美制服同性| 中日韩美女免费视频网站在线观看| 97国产一区二区精品久久呦| 久久亚洲成人精品| 国外成人免费在线播放| 亚洲精品乱码久久久久久按摩观| 欧美麻豆久久久久久中文| 欧美国产第一页| 国产精品久久久久久久久影视| 精品视频久久久| 日韩欧美亚洲成人| 97久久超碰福利国产精品…| 日韩免费电影在线观看| 久久精品99久久久久久久久| 欧美性xxxx极品hd欧美风情| 少妇高潮 亚洲精品| 中文字幕av一区二区三区谷原希美| 亚洲激情视频网| 国产91在线播放精品91| 91久久久在线| 久久精品99国产精品酒店日本| 亚洲一区二区三区毛片| 亚洲va欧美va国产综合久久| 成人xvideos免费视频| 狠狠躁夜夜躁人人爽天天天天97| 国产精品久久久久久久av大片| 2021久久精品国产99国产精品| 中文字幕av一区中文字幕天堂| 九九久久精品一区| 国内精品国产三级国产在线专| 色偷偷亚洲男人天堂| 色妞欧美日韩在线| 亚洲女人被黑人巨大进入al| 国产97色在线|日韩| 国产91在线高潮白浆在线观看| 国产精品久久久久久久天堂| 日韩欧美一区二区三区| 亚洲最大在线视频| 国产精品va在线播放我和闺蜜| 亚洲精品一区久久久久久| 欧美理论电影在线播放| 亚洲人高潮女人毛茸茸| 国产精品免费久久久| 北条麻妃一区二区在线观看| 国产成人97精品免费看片| 这里只有精品丝袜| 成人免费高清完整版在线观看| 91麻豆国产精品| 国产成人精品最新| 亚洲另类图片色| 九九精品视频在线观看| 日韩电视剧在线观看免费网站| 色偷偷av亚洲男人的天堂| 日本不卡视频在线播放| 欧美野外猛男的大粗鳮| 久久精视频免费在线久久完整在线看| 91综合免费在线| 精品久久久久久久久中文字幕| 国产精品黄视频| 国产精品久久久久影院日本| 欧洲中文字幕国产精品| 欧美电影在线观看网站| 日韩精品福利在线| 日韩视频在线观看免费| 黑人与娇小精品av专区| 一区二区三区天堂av| 亚洲午夜未满十八勿入免费观看全集| 热久久视久久精品18亚洲精品| 久久久在线免费观看| 国产一区二区动漫| 国产欧美 在线欧美| 久久久久久亚洲精品| 欧美一级淫片丝袜脚交| 久久久视频免费观看| 欧美日韩视频免费播放| 91av在线国产| 亚洲va久久久噜噜噜久久天堂| 日韩免费中文字幕| 亚洲欧美国产一本综合首页| 亚洲丝袜一区在线| 欧美放荡办公室videos4k| 亚洲天堂色网站| 欧美第一页在线| 国产极品精品在线观看| 成人网址在线观看| 日韩高清电影免费观看完整| 日韩高清av一区二区三区| 亚洲国产精品免费| 在线一区二区日韩| 国产主播精品在线| 91欧美精品成人综合在线观看| 国产精品美乳一区二区免费| 欧美日韩一区二区免费在线观看| 欧美视频在线观看免费网址| 亚洲性生活视频| 国产视频精品va久久久久久| 欧美日韩国产精品专区| 日韩欧美成人免费视频| 日日骚久久av| 国产精品久久久久高潮| 91在线视频成人| 最近2019好看的中文字幕免费| 亚洲丁香婷深爱综合| 91av在线不卡| 91精品国产91久久久久福利| 国产亚洲欧美一区| 色诱女教师一区二区三区| 亚洲影院在线看| 国产精品一二三视频| 久久青草精品视频免费观看| 亚洲 日韩 国产第一| 久热国产精品视频| 日韩成人在线网站| 亚洲欧美日韩在线一区| 欧美有码在线视频| 国模吧一区二区| 一区二区av在线| 一区二区三区黄色| 在线播放日韩欧美| 在线观看久久久久久| 欧美美女操人视频| 国产精品成av人在线视午夜片| 国产伦精品一区二区三区精品视频| 91亚洲精品久久久久久久久久久久| 精品亚洲夜色av98在线观看| 狠狠色噜噜狠狠狠狠97| 国产丝袜高跟一区| 成人精品aaaa网站| 亚洲精选中文字幕| 性欧美亚洲xxxx乳在线观看| 欧美—级高清免费播放| 欧美午夜女人视频在线| 日韩av手机在线观看| 久久在线免费视频| 日本国产高清不卡| 国产精品亚洲欧美导航| 亚洲一区二区三区久久| 91精品国产电影| 亚洲一区二区免费在线| 日本欧美中文字幕| 日本午夜在线亚洲.国产| 91黑丝高跟在线| 精品久久香蕉国产线看观看亚洲| 国产成人高潮免费观看精品| 欧美黑人性猛交| 最近2019年日本中文免费字幕| 国产精品视频成人| 国产精品久久二区| 自拍偷拍免费精品| 久久中文字幕在线| 欧美一区二区三区四区在线| 欧美国产亚洲精品久久久8v| 日韩美女激情视频| 91久久在线观看| 久久久久久综合网天天| 国产ts人妖一区二区三区| 亚洲电影免费观看高清完整版在线观看|