2009-07
26

注:本文使用的CakePHP版本为 1.2.3.8166。

使用CakePHP开发时,免不了要将调试级别设置为2, 这样页面上会显示出执行的SQL语句及结果,很方便。 但在做API页面时就比较麻烦。一般API页面的输出结果是XML或者JSON格式, 如果后面多了些调试信息,客户端就无法正确解析了。

解决方法很简单,只要在API的action函数中改写调试等级即可:

function api_index() {
  ...
  Configure::write('debug', 0);
}

不过,每个action都要写这么一行,太麻烦了。能不能想个办法,自动地关闭所有API页面的调试信息?

阅读全文 »
2007-11
19

自连接,就是自己引用自己,比如员工表,某个员工的上司也保存到员工表中, 那么想要同时得到一个员工和他的上司的信息就得使用自连接。 表如下所示:

employees

PKidINT自动编号id
nameVARCHAR(64)员工姓名
FKsuper_idINT上司id,引用自身

那么查询时就需要这样写:

SELECT A.name,B.name FROM t_employees A, t_employees B
  WHERE A.parent_id=B.id

而在CakePHP中如何实现,就需要一点小技巧。 这篇文章 简单介绍了如何做到这一点,其实不难,能把model建好了就80%了。

原文讲得比较罗嗦, 我就不再重复了,仅将要点写在这里。

阅读全文 »
2007-11
02

前些日子就知道CakePHP发布了1.2 pre-beta版。 偶然在delicious上看到这篇文章: CakePHP 1.2的五个方便的新特性。 好文不敢独享,现将其大意记录如下。图片就不转载了,想看图的话可以直接去原文上看。

1. 集中显示友好的错误信息

使用框架时最郁闷的莫过于调试,PHP会报告框架出错,而实际上我们代码中的错误则很难发现。 CakePHP 1.2版中,错误信息会集中显示在页面上方,并且单击错误信息就能看到错误所在的位置, 可以节省大量的调试时间。

2. 内建分页功能

CakePHP 1.1时必须手动书写分页代码,而1.2版则内建了分页功能,还支持单击标题排序。 只需书写下面的代码:

class MembersController extends AppController {
    var $paginate = array('order'=> 'Member.created DESC');
    function listall() {
        $this->set('data', $this->paginate());
    }
}

3. 复杂的表单验证

原来1.1版的表单验证只能使用正则表达式,因此无法验证类似于“包含数字、字母并且长度不大于10且可以为空” 这样的复杂规则就很难通过表单验证实现。而1.2版则支持下面这种复杂的验证。

var $validate = array(
'title' => array(
    'required' => VALID_NOT_EMPTY,
    'length' => array( 'rule' => array('maxLength', 100))
    ),
'body' => VALID_NOT_EMPTY
);

4. 内置电子邮件功能

1.2版添加了发送电子邮件的模块。

5. HTTP请求生成、XML解析

1.2版支持HTTPSocket、XML模块,通过它们可以直接调用外部的WebAPI了。


2007-10
19

原文链接:http://www.avatarfinancial.com/pages/cake/

这篇文章可以说是CakePHP教程中最经典的了。虽然不是完整的手把手系列, 但作者将自己使用CakePHP的经验总结了21条,这些尤其是对新手十分有用。

翻译时故意保留了一些CakePHP中特有的词语没有翻译, 如controller、model等。相信学过CakePHP的人应该马上就能理解它们的意思吧。

另外,CakePHP的wiki已经失效,取而代之的是一个名为bakery的网站。 原文中引用的wiki的链接也都已更新到了bakery上。

阅读全文 »