标签:yii

浏览模式: 标准 | 列表 | 图文
Yiiframework(Yii框架)开发笔记

Yiiframework(Yii框架)开发笔记

一点小小的笔记
1、三表关联,一个用户有一个扩展信息表,也拥有一个商铺,于是relations方法是这样的
商铺:array('member'=>array(self::BELONGS_TO,'Member','member_id'))
用户:array('shop'=>array(self::HAS_ONE,'Shop','member_id'),'extends'=>array(self::HAS_ONE,'MemberExtends','member_id'))
扩展:array('member'=>array(self::BELONGS_TO,'Member','member_id'))

然后开始用Shop::model()->find("shop_id = 1");查询,理论上应该不会有错,但事实上还是错了,报CActiveFinder 758行错误。查了很久发现其实没有问题,但就是报错,一点点的修改也不行。然后问google,也查不出什么具体原因,然后根据报错的信息所在行猜测,因为他是foreach( $this->_pkAlias ....)这一行,说是foreach出错,那我想是不是因为主键问题?于是三个表一个个的查看结构,结果还真的发现了member_extends表,居然没有主键。哦,卖糕的。。。这种事情也有?于是给它把自增字段加上了主键索引,然后再调试。OK鸟。

我日,都自增字段了还不设主键?NND,折腾了我一下午啊。。。

2、获取attributes值

根据取回来的结果,当然要获取值喽,查看手册可以了解到,只要设了select,那么取回来的就是指定字段,多余的字段,虽然也存在于attributes数组中,但都是空值(只是觉得这样浪费了点空间。。。)

3、where条件

where条件是字符串。。如果需要加,那就用CDbCriteria吧,$criteria = new CDbCriteria(); $criteria->addCondition("a=:a");$criteria->params[':a']=$a;

主要是可能会有判断条件,所以参数变量跟在addCondition后面吧。。

 
Yiiframework为每个module单独指定db连接

Yiiframework为每个module单独指定db连接

Yii的module功能确实很方便,但现在的问题在于,我需要为每个module单独指定一个数据库连接,这样我就可以将不同的系统整合在一起了。找了不少资料,好象都没有这样类似的功能。master/slave之类倒是有不少类似的整合方案的。

测试了一下,发现可以这样操作,即在全局配置文件中的module里为module加上components中加上db,然后就基本OK了。但即使这样,你还是会发现不太正常,会提示db不存在,其实需要在这个db数组中加上class=>CDBconnection就一切OK了。会自动加载的哦。(烂桔在这里帮了不少忙)

然后数据连接就是Yii::app()->getModules('modulename')->db。【不过他在这里说的是findModules,我看了一下,getModules就直接可以用了。HOHO】

如果你有master和slave,也可以按照这样的配置,然后再在onBeforeFind方法里设定db=Yii::app()->getModules('module')->readerDb之类的。并在onAfterFind后再置 db为write的链接。(感谢HM提出方案)

如果有多个slave,又想使用同一个slave缓存,则可以先随机取得slave的名称。然后存入session,然后再指定链接。这样,每一个用户使用的slave就会是唯一的。其实提高了效率(感谢神仙提出来)

乱弹

乱弹

随便的扯几句喽。。。
1、ipad ,突然发现sbsetting的功能超强大啊。。我明明在ipad里选择了飞行模式,居然可能通过sbsetting打开wifi。而且飞行模式的小飞机居然还存在。牛叉的。。

2、电视连续剧《儿女冤家》,突然感觉里面的情节好真实,这是自《蜗居》以来又一个让人心动的电视。看到电视里的人物,心里觉得好揪心,啃老族这一个词已 经成了一个很让人烦的词语。有的时候,我也觉得自己也算一个啃老族 啊。工作这么多年,也成家了,却几乎没有拿过一分钱回过家。看到电视里的那对儿女,却是比我还厉害。不但吃父母用父母还要占父母的房子。唉。。。。。因为 没有看过结局,所以我就不再多下评论了。

3、乔楚乔大姐,又想带队翻译PHP手册了。感觉乔楚还算是很专注的一个人,但事实上,翻译这种事情,一定要对PHP很深入才能翻译,否则翻译出来很可能 词不达意。所幸他们还会再做校验。同时乔楚发邮件给官方,并收到邮件,终于也可以使PHP中文版在下载列表里显示出来了。(都2年多了,中文手册一直被雪 藏。。感谢乔楚)

4、Yii,最近我在看着Yii,并且根据Yii的代码抄一遍。这样感觉一来可以学习Yii的代码,可以更深入一点。二来,也可以了解Yii的一些设计思 想。Yii的代码还算是比较多的,而且多了一些zii,gii之类的扩展,功能是越来越强大了。只是Yii已经只支持PDO了。准备在抄的过程中还是要支 持一下默认的mysql扩展。(因为有的虚拟主机在命令行的时候,不支持PDO,很妖)

将Yiiframework与JQuery easyUI整合使用

jquery easyUI框架是国内某JS牛人写的仿extJS的框架。比较简单的实现一些功能,虽然目前还是有一些BUG,但将就着用用,也还能够接受。
YiiFramework是国内某PHP牛人写的php框架,哦,好象人不在国内。最近用的人较多。本人比较喜欢他们提供的虚拟机(只有16M,当然,安装后达到100多M)

随便的整合了一下,目前是这个情况。

b4f42cb619240ea1b4deaa6398e3e2f1

几个问题需要注意一下的

1、layout的时候要注意。因为easyUI框架里面的页面也需要用到jquery,因此在布局的时候得考虑header部分

2、登录框,与1的条件相关

3、$this->render与$this->renderPartial ,renderPartial是不渲染任何模版的。如果你不想用layout的时候,可以用这个renderPartial方法

其它的就属于一些小事了,比如菜单可以用json_encode输出之类的。前两天还写了一个jquery easyUI这个outlook式的menu改进。

整体用下来还算比较方便

Yii documents

Yii documents

这两天一直在看Yii框架,也下载了一份API手册,却发现API手册里只有方法的介绍,却没有具体的调用方法,如果是纯方法的话,说实话,我还情愿用IDE的自动完成来查看呢。当然有个API手册在查询的时候会比较方便一点。

那么,有没有真正的manual呢?到官网的documentation分类去看了一下,NND,一堆 英文,不过,在我犀利的眼神下,还是发现了这玩意:The Definitive Guide to Yii ,点开一看,原来这才是类似于PHP手册的manual呀。可惜能够下载的只有PDF版本。更可恨的是,也只有英文版的,算了,将就点吧。。。虽然英文烂了点,一些简单的东西还是能够看得懂的。

如果初学Yii,还是建议看一下这个guide:The Definitive Guide to Yii ,它,有中文版,在:http://www.yiiframework.com/doc/guide/zh_cn/index

左边的树的目录也很清晰,值得一观,不过更建议的是多看一下:http://www.yiiframework.com/doc/guide/zh_cn/basics.application,我最初就是没看这个,一下子不知道如何调用Cache,都想在代码 new Cache之类的了。

--EOF--

后记:感谢烂桔推荐的:http://dreamneverfall.cn/yiidoc/index.htm,烂桔的网站为:http://iorange.cc

Yii 笔记二

Yii 笔记二

Yii的用户登录,如果不算上权限的话,恐怕真的是很简单的登录。
简单的判断,简单的处理一下就完事了。
但我今天还真的被简单的折腾了一下。
User登录,需要写几个地方
1、components目录下的UserIdentity.php中,需要加一个判断用户的方法,返回errorCode,当然没有错的话就返回0,这是常用ERROR_NONE
2、model目录下的loginForm,里面有简单的判断处理,如果登录成功,调用CWebUser中的login方法。起初的时候,我一直没找到Yii::app()->user是哪个类。。
3、由于Yii::app()->user->login方法的特殊性,因此,必须要在UserIdentity.php中设定好getId,getName,和states变量。当然最简单的就是判断是否取到用户数据,如果取到的话,直接$this->setPersistentStates($usermodel->getAttributes());如果没有id,name的变量,那么即使你登录了,还是会显示没有登录的。我就是在这里被折腾了好久。

over。。。

初用Yii

初用Yii

Yii是在iorange的推荐下使用的,这两天我才刚刚在使用。做点笔记而己,没有其他

1、就象我在neatcn.com写的,创建项目非常简单,yii.bat这个命令就可以完成了。详细就在http://www.neatcn.com/show-57-1.shtml

2、项目目录中components中的文件,会在autoload中被引用,也只有这一个目录下的会被autoload,其他的都是有固定规范的。(不知道有没有理解错)

3、model目录下居然是tablemodel和form两种的集合,有点乱(官方的例子是这样的),不过想着form的validation也是用tablemodel来完成的,又能够理解这种做法,普通的tablemodel类继承cActiveRecord。

4、Controllers目录下是控制类,默认是SiteController,和其他框架默认是indexController有点不一样。继承自CController类。controller类中有一个layout的变量,可以设定layout。一般可以手工指定,如果同一个类里有不同的layout,估计还是要写个方法才行

5、Model的activeRecord返回的是对象,而不是象其他框架默认返回数组,因此取集合时要用getAttributes方法,当然,如果是只有一条数据,也可以直接$model->fieldname这样的方式来获取值 。

才学了这么一点,慢慢来吧。。重构路是漫长的。

犹豫:是否采用Yii把sablog重构

犹豫:是否采用Yii把sablog重构

一直在犹豫,是否要重构sablog,还是说仅仅把前台的模版系统重构一下就完事。

曾经想过是采用thinkPHP或者fleaPHP(用不惯Qee),但后来有各种各样的原因,导致就没有重构。

现在,文章数据也多了,有2年的数据了,也因此想要增加一点新功能,所以就在想着是否要重构一下。否则新功能加起来就很繁琐。

同时还要考虑一下模版,因为现在的模版太挫了,很多广告位都无法设定好,不是在顶部就是在侧部,根本没有人想点,如果在中间,或许点击的次数会多一点?

当然,我需要考虑的是缓存,一直以来sablog都是用的自带的文件缓存,虽然文件数量不大,但总也占着资源,为什么不把APC开启并使用呢?呵呵。。。

可是我还要考虑的是我原先博客里的代码高亮,虽然有想过要换到synaxhilight上面,但原来的数据怎么办?我总不可能一个个的改吧?

再然后就是,如果是换系统,那又得考虑数据迁移了,现在这样的后台,我还能够接受。一旦换系统,后台我还不一定能够熟悉呢。

最后,同一文章存放多个分类。。。【被朋友说话打断了,郁闷】

反正,就是一想法。

Yii Demos 随想

Yii Demos 随想

最近想看看yii,也想看看他的demo,就去了demo网站:http://www.yiiframework.com/demos/,挺有意思。

创意?不知道
下载一个vm虚拟机,直接在vm里面跑起来。挺不错
我试了一下,下载下来19M,解开后,稍有点大70多M,直接放到vm server里就可以运行了。
根据官方所说,它支持:

The following components are installed on this appliance:

  • PHP 5.2.3 (in fast-cgi mode)
  • Lighttpd 1.4.7 (mod_rewrite and fast-cgi enable)
  • Yii 1.0.6 (including demos)
  • PostgreSQL 8.2.4
  • phpPgAdmin 4.1.3
  • Linux kernel 2.6.17.7

居然不是mysql,看来mysql太大了,而且太适合cgi之类的进程?(windows下的精简版用过,好象也不是特别大。还是说yii对postgreSql有特别的优待?)

再试了一下,居然也支持ssh连接。
但是缺点
1、无法切换到root
2、无法关机???halt不行,shutdown说没有这个命令
3、wget??不能下载?本来想装个samba看看的。。看来只能算了。只能当成普通的虚拟机玩玩吧。

最后再说一点,可以考虑象这样的打包方式进行演示。代码加密,环境配置好,windows下面用小型整合包,linux下面用这样的虚拟机,两份同时给客户展示。。

或许会有更多不同的用户体验?
也是猜猜而已。。。