新葡亰496net 新葡亰编程 Yii框架组件和事件行为管理详解_php实例_脚本之家

Yii框架组件和事件行为管理详解_php实例_脚本之家

本文实例汇报了Yii框架学习笔记之应用组件操作。分享给大家供大家参谋,具体如下:

正文实例呈报了Yii框架自定义数据库操作组件。分享给大家供大家参照他事他说加以考察,具体如下:

本文实例陈说了Yii框架组件和事件表现管理。分享给大家供我们参谋,具体如下:

澳门葡亰娱乐场手机版,负有的零件都应注解在config/web.php

Yii 的数据库操作对象提供的方式确实很便利。
可是临时大家曾经习感到常了我们原先编写php的数据库操作语法,未有那么多日子去留心看各种Yii提供的数据库操作语法,怎么办吧?
这便是单方面学习,一边叁遍封装本身习贯的数据库操作类。
今后我们应用数据库操作对象,就用大家风雨同舟定义的零件去操作。

Yii是三个基于组件、用于开垦大型 Web 应用的高品质 PHP
框架。CComponent大概是全体类的基类,它调控着组件与事件的管制,其方法与天性如下,私有变量$_新葡亰496net,新葡亰,e数据存放事件,$_m数组寄存行为。

//组件声明在该数组下'components'=>array( //自定义组件1 - 函数形式 'customComponent1' => function(){ $custom = new appcomponentsCustomComponentrealizationCustomComponent1(); $custom->setName; $custom->setAge; return $custom; }, //自定义组件2 - 数组形式 'customComponent2' => array( 'class' => 'appcomponentsCustomComponentrelazationCustomComponent2' 'name' => '谭勇', 'age' => 22 ), //自定义组件 - 字符串形式 'customComponent3' => 'appcomponentsCustomComponentrealizationCustomComponent3'),

将自身的数据库操作组件注册进配置文件web.php 中

组件处理

固然只是在components
中宣示了该构件,那么独有在第三遍调用的时候才会实例化这么些组件,之后调用都会复用早前的实例。
假如您在bootstrap
数组中声称了那个组件,那么该器件会随着应用核心的创立而实例(也即是私下认可会被实例,并非第贰次调用才会实例这几个组件)。

array( 'components' => array( //自定义数据库操作组件 'dbOper' => array( 'class' => 'appcomponentsDbOperrealizationDbRealization1' ), //Yii 框架数据库连接组件 'db' => array( 'class' => 'yiidbConnection', 'dsn' => 'mysql:host=localhost;dbname=yii', 'username' => 'root', 'password' => '123456', 'charset' => 'utf8' ); ))

YII是三个纯oop框架,非常多类中的成员变量的受保证依旧个体的,CComponent中动用php中的魔术点子__get来访问和装置属性,但这个点子的效应远不指这一个。上边用__get()来说明

//默认加载customComponent1 和 customComponent2 组件'bootstrap' => array( 'customComponent1','customComponent2'),

接下来大家就能够在components 目录下定义大家的数据库操作类了。
因为,不晓得怎么去赢得php pdo
的原生操作对象,所以那边是对Yii数据库操作类的一个三遍封装。

public function __get{ $getter='get'.$name; if(method_exists return $this->$getter(); else if(strncasecmp===0 && method_exists { // duplicating getEventHandlers() here for performance $name=strtolower; if(!isset $this->_e[$name]=new CList; return $this->_e[$name]; } else if(isset return $this->_m[$name]; else if { foreach { if && (property_exists || $object->canGetProperty return $object->$name; } } throw new CException(Yii::t('yii','Property "{class}.{property}" is not defined.', array('{class}'=>get_class, '{property}'=>$name)));}

在接纳目录下创立 components 目录

接口文件 DbOper.php 自定义的数据库操作类都得贯彻该接口

当CComponent或然其子类对象实例$obj->name的时候,__get方法:

组件 CutomComponent

针对DbOper 接口的实现类 DbRealization1.phpgetQueryObj->queryAll return $result; else return array(); } /** * interface @Override */ public function fetch($sql='',$keyVal=array return array(); $result = $this->getQueryObj->queryOne return $result; else return array(); } /** * interface @Override */ public function insert($tableName='',$values=array { if return 0; $insert = $this->getYiiDbConnection; if { $keys = array_keys; return $insert->batchInsert($tableName,$keys,$values)->execute(); } return $insert->insert->execute(); } /** * interface @Override */ public function update($tableName='',$where = '',$update=array { if return 0; if return 0; return $this->getYiiDbConnection ->update($tableName,$update,$where) ->execute(); } /** * interface @Override */ public function delete($tableName='',$where='') { if return 0; return $this->getYiiDbConnection ->delete ->execute(); } /** * 获得查询操作对象 * @return * Object */ private function getQueryObj($sql='',$keyVal=array { $query = $this->getYiiDbConnection()->createCommand; if $query->bindValues; return $query; } /** * interface @Override */ public function transcation { if return false; $db = $this->getYiiDbConnection(); $outerTransaction = $db->beginTransaction(); $runClient = true; try { foreach { $db->createCommand; } $outerTransaction->commit(); }catch{ $runClient = false; $outerTransaction->rollback(); } return $runClient; } /** * interface @Override */ public function getYiiDbConnection() { if { $this->db = Yii::$app->db; } return $this->db; }}

1、首先推断实例中是还是不是有getName(卡塔尔方法,要是有则赶回 ,若无实践第2步

接口类 appcomponentsCustomComponentCustomComponent;

潜心:笔者的自定义数据库操作类 注重 Yii::$app->db 那些组件,
也便是框架自带的数据库连接组件

2、剖断是不是是以on开首的,以on开始的相像都以CComponent子类中留下的事件,用与挂在事件,通过method_exists推断该name是还是不是存在类的实例中,如若存在,重回事件,不然实践第3步

标签:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图