Posts tagged with Yii


我也不知道标题该怎么写才能描述我要说明的问题,意思就是可以放Yii的表单生成器功能更加灵活。 默认的Yii的表单生成器只需要这样就可以了: $form = new CForm('application.views.site.loginForm', $model); 这里的application.views.site.loginForm也可以是配置数组。但是如果$model参数不传的话是会报错的:Fatal error: Call to a member function isAttributeSafe() 比如我要生成一个组表单,但是我不想依赖于model,根据配置就可以生成一组表单该怎么办,google一下,http://www.yiiframework.com/forum/index.…

其实在Yii中,一个插件的模块可以通过Widget或者Module来实现。后来考虑到希望做成Wordpress那样,可以安装,卸载,配置,甚至灵活实现权限和菜单的控制,所以抽空研究了下Wordrpress的插件实现机制,并集成到Yii中。不过最终和同事讨论以后还是决定改造Module来实现的插件机制,这里记录一下Wordrpress的插件思想集成到Yii中的过程。 类似Wordrpress的钩子机制插件原理主要就是:注册钩子,放置钩子,运行钩子,不多说,直接上代码。 1.新建app/protected/components/UPlugin.php <?php /** * 插件机制 Component */ class UPlugin extends CApplicationComponent { public $pluginDir = ''; private…

公司的客服系统是用Yii开发的,权限系统是基于Yii CDbAuthManager开发的,随着权限项目的增加和权限组以及人员的增多,导致加入页面的时候打开很慢,因为没进入一个页面会去检查一下该用户对于该操作的权限。下面是用XHProf查看的结果部分截图,会发现CDbAuthManager::checkAccess 和CDbAuthManager::checkAccessRecursive等CDbAuthManager方法会调用很多次,而CDbAuthManage是基于数据库,所以每次调用还要去进行数据库的查询,这样难免会给性能带来瓶颈。(该图只要关注第一和第二列就可以了,其他列是优化过的结果且本机的测试数据库)。 利用Redis 加速 Yii CDbAuthManager 再来看下CDbAuthManager::checkAccessRecursive这个方法的实现,这个方法会去递归的查询数据库来验证用户的授权项目。 protected function checkAccessRecursive($itemName, $userId, $params, $assignments) { if (($item = $this->getAuthItem(…

PHPexcel官方下载以后,放入Yii的protected\extensions\phpexcel下面 try { spl_autoload_unregister(array('YiiBase', 'autoload')); $phpExcelPath = Yii::getPathOfAlias('application.extensions.phpexcel.PHPExcel'); include($phpExcelPath . DIRECTORY_SEPARATOR . 'IOFactory.php'); spl_autoload_register(array('YiiBase', 'autoload')); $objPHPExcel = PHPExcel_IOFactory::load($File[…

CGridView 是Yii Framework Zii的组件, 以表格的形式显示数据,CGridView 也支持分页和排序,CGridView最基本的用法和ListView类似,通过设置 data provider。 GridView缺省显示了所有的字段,并使用缺省的格式显示字段,如果需要控制字段显示和格式,可以通过配置 CGridView::columns属性来实现。GridView的每列为一个CGridColumn对象: CGridColumn为所有Grid 列表项的基类,表格的每例可以有一个表头,多个数据单元,和一个可选的表尾单元格。 CButtonColumn 表示该单元格为一个或多个按钮,缺省显示三个按钮, “view”, “update” 和”delete”,可以通过设置 buttons 和 template来更改。 CCheckBoxColumn…

感觉蛮有用的,转过来看看。 db组件 ‘schemaCachingDuration’=>3600, 为什么不起做用? 需要开缓存 如何在页面下边显示sql的查询时间 在log组件的routes中加入 array( ‘class’=>’CProfileLogRoute’, ‘levels’=>’error, warning’, ) 同时在db组件中加入 ‘enableProfiling’=>true, 同时在这种情况下,可以用CDbConnection::getStats() 查看执行了多少个语句,用了多少时间 如何知道某一个程序段运行需要的时间 配置好CProfileLogRoute后,在需要测试的地方加上 Yii::beginProfile(‘blockID’); //程序段 Yii::endProfile(…

使用Yii 的Active Record 来获取查询结果的时候,返回的结果集是一个对象类型的,有时候为了数据处理的方便希望能够转成数组返回。比如下面的方法: // 查找满足指定条件的结果中的第一行 $post=Post::model()->find($condition,$params); // 查找具有指定主键值的那一行 $post=Post::model()->findByPk($postID,$condition,$params); // 查找具有指定属性值的行 $post=Post::model()->findByAttributes($attributes,$condition,…