欢迎深入狼穴···
CakePHP - Jack和David的蛋糕!
一点心得顺便记录一下。
Cakephp本身提供了相当好而且相当简便的缓存和优化技术,通过Element技术可以缓存某个部分的代码,但是有了Yaml文件的帮助,可以说是如虎添翼!
Yaml文件是一种文本的易读的文件格式。
我们可以使用Yaml文件为我们的Element提供必要的数据支持,然后,通过我们的后台代码生成需要的Yaml文件,这使得Yaml文件成为了一种临时缓存文件。
这有几个好处:
1. 易解析,可以借助Pear的Yaml组件实现从PHP数据到Yaml数据的相互转换
2. 高效,Yaml适用于实现数据量不是很大,但是需要频繁操作数据库的Element,这使得某些Element操作数据库的几率为0,我们所要做的就是在后台生成它。
3. 便于修改,Yaml文件的最大优势就是它的易读性,我们甚至可以将网站的配置文件全部放在Yaml文件中,修改简单,我们只需要打开记事本,简单的缩进就完成了,相比XML和其他格式化符号文件,可读性非常好。
总结一下:
Yaml非常适合用在频繁操作数据库但是数据量不大的模块单元中,效率将会得到很大的提升。
穷居而野外,升高而望远
本文来自苏南的博客, 网址:http://newsn.net
Cakephp的很强大的i18n功能就是用来实现本地化和国际化的。他通过使用语言配置文件使得程序能够很好的适应变化进行本地化。通过新建 locale/chi/LC_MESSAGES/default.po文件,并指定语言选项为“chi”实现。本文中说的就是如何实现这个本地化过程,当然本文中的poedit并不是必须的,但是他可以使得工作效率更高。
一、关于i18n和L10n
这2个东东其实头一次我看到的时候也是一头雾水,但是经过百度的一通搜索,得出的结论就是,不管是几个n,最终的目的就是实现程序本地化就好了,说白了,就是由很多的语言配置文件,反正我是这么理解的。大家也可以去看看,http://baike.baidu.com/view/372835.htm 这里有很详细的说明。
要从controller传递变量到view,需要使用set method。基本的用法是
$this->set('categories',$categories);
更顺手的写法是
Tree是CakePHP 1.2的核心Behaviors之一,可以用来轻易的实现无限极分类,并呈现树状列表。
图片来源:Tree traversa,WIKIPEDIA
项目进行中,总是离不开数据库,那么必然就要有数据!当前,我们的项目进行中要是有更新(程序以及schema.sql和测试数据的更新)见下图:
然后,我们会通过运行cake schema run create 或者 cake schema run update 来更新数据库结构,然后通过命令:zcat APP/config/sql/sample_data.sql.gz | mysql -u root -p [project_db] 将上图的模拟数据包中的数据填入到数据库中。
以上就是我们在项目开发过程中,经常进行的操作:通过SVN更新项目,更新schema,重新填入模拟的数据。那么我们通过什么来生成成千上万条的数据呢?是的,通过GenerateData。
文章原文来自于 Eelco Wiersma 的文章 《Using JSON in CakePHP 1.2》
参考文章
简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。Cakephp1.2提供了对JSON的内置支持,主要体现在两个特殊的方法:
Router::parseExtensions() 和 JavascriptHelper::object()
目标
我们要通过JQuery的$.getJSON方法,获取Cakephp服务端的JSON数据,URL可能是这个样子
http://localhost/posts/index.json
如何完成?
Captcha官方
Captcha下载
http://www.captcha.ru/en/kcaptcha/
使用Captcha可以实现安全的验证码功能,Captcha提供了多种风格和样式的风格比如
使用方法超级简单
getImage.php
感谢 Yoophi 提供的参考文章
$entry->title(’Pagination with custom find types in CakePHP’);
大概的中心思路是这样:
通过在模型中重载find方法,实现类似于find(’first’),find(’list’)的功能
app_model.php
Sorry to everyone who sent me emails between Jan 2009 to May 2009 and have not received any replies. I just realised that the emails got bounced due to my web host routing them to the local MX server instead of Google's mail servers. I am sure it used to be working but oh well. So please don't think I can't be bothered to reply to emails. Those who have yet to get any replies, feel free to drop me another email via the contact page. Thanks!
现在的项目对以前已经完成的部分工作进行了修改!这也可以让自己将cakephp项目进行的一些东西记录下来,与大家分享!
网站策划,设计,商定程序开发中的文件组织形式等等都已经完成,在此不便多少,也说不清楚!就是记录下程序员怎样将那些HTML文件变成.CTP文件,并实现其功能的工作流程。
项目(项目策划已经完成)已经开始,设计人员出HTML文件!然后交由cakephp程序员按照商定的文件组织形式将HTML文件改写成.ctp文件。将页面按功能划分为不同的区域,并根据功能的使用频度,来决定是否将其用element的方式来实现其功能!总之,把一个个页面显示的内容,想象成由一个个页面元素拼合而成就可以了!
当把HTML页面拆分成.ctp文件后,就是使用cakephp的模型(model),控制器(controller)来实现其各个页面元素的业务逻辑了!
对完成的工作,进行测试,修改,提交!直至项目完成!在实现其业务流程和业务逻辑的工作中,大部分工作都放在了model中,希望大家能注意下!尽量将处理业务逻辑的代码放在模型中!
感谢台湾PHP联盟的 kiang 的Help
Cakephp的关联是写在模型里面的,有时候我们需要在控制器中Join一些其他的表,执行一些复杂的查询,那么我们可以这样写
$data = $this->User->find('all',array(
'conditions' => array(
'OR' => array(
'User.name LIKE' => ''%keyword%'',
'Note.subject LIKE' => ''%keyword%'',
),
),
'joins' => array(
array(
'table' => 'notes',
'alias' => 'Note',
'type' => 'LEFT',
'conditions'=> array('User.id = Note.user_id'),
),
)
));参考文章
东西越学越深入!可惜,David同学在某些问题出现时,还是一头雾水!像昨天,我就遇到了在Cakephp中使用”cake schema run update”就出现了问题!老提示我运行run update有错误!
最后在Jack同学的帮助下,解决了问题!原来schema.php文件要是有增加信息或者把以前的信息删除,想通过cake schema run update更新的话,需要先执行“cake schema run create”,然后再执行导入数据的操作!最后执行一次“cake schema run update”即可!
这只是我在开发过程遇到问题的解决办法!可能不能解决大家遇到的类似问题,如果大家也遇到了schema的问题,欢迎大家在回复中与我们交流,分享解决问题的方法!
刚刚进行了一小部分功能的开发!在开发过程中为了实现checkbox组,出现了“Cannot unset string offsets in /usr/share/cake/cake/libs/view/helpers/form.php on line 1863”的错误!
其错误是因为其错误代码:
<?= $form->checkbox('noteid',$note['ReceivedNote']['id']) ?>其正确的书写代码为:
<?= $form->checkbox('noteid',array('value'=>$note['ReceivedNote']['id'])) ?>另出现了:
Notice (8): Undefined index: is_read [APP/views/themed/design/notes/trash.ctp, line 38]
其原因为:在控制代码,字段列表中没有‘is_read’字段!应该加上,例如:
'ReceivedNote.receive_user_id',
另外,在视图(view)中,使用Auth的值,其方式为:
<? $session->read('Auth.User.id') ?>记录,以便以后查找!
Added a new French section as suggested by Pierre MARTIN! Thanks to him, the section starts off with 4 good blogs on CakePHP in French.
For the rest of you, feel free to submit any feed which I may have missed. Enjoy reading!
在使用cakephp的分页方法paginate之前如果想使用bindmodel方法绑定model的时候,需要给bindmodel第二个参数设定为false,使bindmodel产生持久绑定,否则在paginate时bind的model会丢失。
$this->Forum->bindModel(
array(’hasMany’ => array(
‘ForumPrivilege’ => array(
‘className’ => ‘ForumPrivilege’,
‘foreignKey’ => ‘forum_id’,
‘dependent’ => true
),
)
),false
);
After the change to use FeedAPI instead of Aggregator Drupal module, feed items have been linking to Planet CakePHP instead of the original article and the author is always me (Derick Ng). Some subscribers are rather turned off by having to click multiple times before arriving at the original article and having no idea who the original author was. I have been putting this off for quite some time and finally found time to dig through the codes. Do let me know if there are any other feedback. Cheers!