Archive for 11月, 2007
Cakephp 的回调函数
Model的Callbacks
我们在model中增加了一些回调函数以帮助你在model操作前后能够织入一些业务逻辑(原文为sneak in,借用了AOP中的织入一词,因为从操作来看这些回调函数等同于AOP中的advice)。为了获得这样的能力,需要使用model中的一些参数并且在你的model中覆写这些方法。
beforeFind(string $conditions)
beforeFind()回调函数是在model的find方法执行前的前置操作。你可以加入任何检索前的业务逻辑。你覆写该方法只要保证在前置操作成功后返回true来执行真正的find方法,返回false中断find方法就可以了。(译注:在一些复杂场景中,需多次持久化的情况下请慎用)。
afterFind(array $results)
使用afterFind回调函数能够更改find方法的返回结果集,或者在检索动作完成后加上一些业务逻辑。该函数的参数$results为经过回调函数处理以后的find检索结果集。
beforeValidate()
beforeValidate回调函数能够在model校验数据之前更改model中的一些数据。同样也可以用来在model校验之前加入更为复杂的额外校验规则。和beforeFind一样,必须保证返回true来调用真正的操作,返回false来中断校验乃至save操作。
beforeSave()
和先前介绍的回调函数类似,在校验完成之后,保存动作之前加入额外的处理(如果校验失败是不会触发该回调函数的)。返回true或者false,不再赘述。
一个比较常见的beforeSave的应用场景就是在保存动作之前格式化日期属性以适应不同的数据库:
// Date/time fields created by HTML Helper: // This code would be seen in a view $html->dayOptionTag('Event/start'); $html->monthOptionTag('Event/start'); $html->yearOptionTag('Event/start'); $html->hourOptionTag('Event/start'); $html->minuteOptionTag('Event/start'); /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ // Model callback functions used to stitch date // data together for storage // This code would be seen in the Event model: function beforeSave() { $this->data['Event']['start'] = [...]
Zend 框架摘要
From: http://www.ibm.com/developerworks/cn/opensource/top-projects/php-resources.html#zend
Zend 框架组件包括:
Zend_Controller
此模块为应用程序提供全面的控制。它将请求转化为特定的行为并确保其执行。
Zend_Db
此模块基于 PHP 数据对象 (PDO) 并提供一种通用方式来访问数据库。
Zend_Feed
此模块使使用 RSS 和 Atom 提要变得简单。
Zend_Filter
此模块提供字符串过滤函数,如 isEmail() 和 getAlpha()。
Zend_InputFilter
对于 Zend_Filter,此模块是用来操作数组的,如表单输入。
Zend_HttpClient
此模块使您能轻易地执行 HTTP 请求。
Zend_Json
此模块使您能够轻易地将 PHP 对象转换成 JavaScript 对象符号,反之亦然。
Zend_Log
此模块提供通用日志功能。
Zend_Mail
此模块使您能够发送文本文件和多部分 MIME 电子邮件。
Zend_Mime
此模块被 Zend_Mail 用来解码 MIME 消息。
Zend_Pdf
此模块用来创建新的 PDF 文档,及加载和编辑现有文档。
Zend_Search
此模块使您能在现有文本上执行复杂搜索。例如,您可以建立一个搜索引擎,该引擎可以基于相关性或其他因素返回结果。
Zend_Service_Amazon、Zend_Service_Flickr 以及 Zend_Service_Yahoo
这些模块提供对这些 Web 服务 API 的简单访问。
Zend_View
此模块处理 MVC 模式的 “视图” 部分。
Zend_XmlRpc
此模块使您能够轻易地创建 XML-RPC 客户机。(已为将来计划好服务器功能。)
编码准则
当您为 Zend 框架编码,或使用其编码时,您应该遵循特定的准则。这些准则是为了使团队项目变得更加简单而设计的。换句话说,通过定义编码规范,您不仅能避免接下来的问题,而且能够使其他人更容易阅读您的代码。Zend 框架文档中包含几页指导准则,比如:
* 确保文件整洁。换句话说,在文件头、标准的四格缩进等前面不能有任何前导或者后置的空格,这些空格会调用 Web 服务器导致意外地发送内容。
* [...]
生成随机汉字字符串 (UTF8)
<?php$outputstr = getRandNumChineseString();echo $outputstr;function getChineseCharacter(){$unidec = rand(19968, 40869);$unichr = '&#' . $unidec . ';';$zhcnchr = mb_convert_encoding($unichr, "UTF-8", "HTML-ENTITIES");return $zhcnchr;}function getRandNumChineseString(){$num = rand(1,16);$str = null;for($i=0;$i<$num;$i++){$str = $str . getChineseCharacter();}return $str;}?>
PHP 需要开启 mbstring 支持
附: 汉字Unicode编码表
Tags: php, 字符串, 汉字
MySQL导出导入命令的用例
1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u dbuser -p dbname > dbname.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u dbuser -p dbname users> dbname_users.sql
3.导出一个数据库结构
mysqldump -u dbuser -p -d --add-drop-table dbname >d:\dbname_db.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
4.导入数据库
常用source 命令
进入mysql数据库控制台,如
mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:\dbname.sql
Tags: mysql, 备份
VIM Study
Vim是号称“编辑器之神”的文本编辑软件,自从接触Vim以来,基本上都是用Vim来修改和编写代码和配置文件的。
但是我一直只会用最基本的命令,虽然把HJKL的定位键已操纵地很熟练。但是Vim其他强大的地方却几乎没有触及过。
学一样东西,就要把它学精。
这次趁着重新编写Ubuntu Tweak,开始彻底地学习Vim。因而,从今天开始连载我的Vim学习旅程。文章中只会写些自己先前不知道的使用技巧。
一、两行合并为一行:
int
main(int argc,char argv)
假如要把上面两行并为一行,只需要定位于int这行,然后按J(大写),即可。
二、撤消和重做
以前很傻,只知道按u来撤消,不知道重做。不一小心,撤消过头就傻了。原来重做是Ctrl+r。
另外,大写U用来撤消整行。
三、连续插入n个感叹号
以前以为用i/a不能进行连续多个字符的插入,原来错了!
Hello World
比如要在上面这句话后面插入10个"!",总不能真的打10个吧?
只要把光标定位于d,然后按10a!……不对啊,才一个!,别急,再按两下Esc!哈哈,出来10个!了吧!
四、快速保存退出
之前我会用两个退出方法:
保存并退出:wq
不保存并退出:q!
现在保存并退出有更快的方法──直接在普通模式下按ZZ即可。
另外,用:e!可以不保存文件并重新载入这个文件。
五、移动和滚动
直接按w来按单词滚动,我居然不常用!亏我还常常dwdw的来删除词。
另外,Ctrl+D向下滚屏,Ctrl+U向上滚屏,比我之前JJJJJKKKKK的有效率多了……汗
不知道在哪里?
:set number,来显示行号,或者直接按Ctrl+G来显示当前行号
六、查找时忽略大小写和历史查找
有时查找单词时需要忽略大小写,只要设置下面的就可以了
:set ignorecase
假如进行过几次查找,想继续以之前查过的关键词查找时,只要按/,然后上下键来选择即可
同理,按下:,然后上下键,也可以翻看执行过的历史纪录,不过仅限于当前的编辑。
七、快速查找
你要找当前光标定位处的字段,难道要慢吞吞输入/和字段吗?不必了!直接按*号,Vim就会把当前的字段作为查找内容,找下一处。
对了,:set hlsearch可以将查找的内容设置成高亮。这样就好看了。反之,加上:set nohlsearch就可以了。上面的ignorecase也可以加no。
八、定义标记
现在才发现标记这个超有用的东西!真是后悔莫及啊!
以前在一个C文件里,从一个方法跳到另一个方法,跳来跳去,都是记行数的……
原来,按下ma,就为某行某列标记了一个a,接下来可以通过`a来访问这个地方!此外,通过'a,可以访问那个位置的行首。
打命令:marks可以看到所有的标记。
如果只按',就可以在最近的两个标记之间相互跳转!
而"则是回到上次编辑该文件时光标的最停留位置。
通过[和]就可以访问最后一次修改的起始和结束位置!
九、替换文本
* 用cw或ce来将光标所处的单词替换掉,效果是一样的;
* 按cc的话,直接替换整行。 另外,用S也能达到同样的效果;
* 按C=c$,替换当前至行尾的内容;
* s的话,是替换当前的字符,跟r的功能一样;
* 以前删除一行至末尾用d$,原来D就行了;
上面的大多数都可以加数字!
十、可视选择
* 按v进行选择,如果想控制头和尾,按o/O进行切换;
* 如果是大写的V,则按行进行选择;
十一、删除单词和替换句子
* 一般来说,用dw/de删除单词需要将光标定位于单词开头,但是如果用daw,则无需这样,只要光标在这个单词上就可以了(daw=Delete a Word),如果不包括空格,就是diw;
* 替换句子的话,就用cis就行了;
From: http://imtx.cn/articles/96.html, http://imtx.cn/articles/98.html
Tags: linux, vim
