对cakephp的几点疑惑和误解

由于开始对cakephp还不是很熟悉,所以在学的时候,对cakephp有了些疑惑和误解,现在终于明白了,现在列举如下:

1. cakephp通过Elements对view实现了模块化,使得代码得到了更好的重用,而且Elements还支持cache功能,一开始我认为Element(view)只能通过controller assign变量来动态显示信息,如果这样的话,那cache功能就没用了,因为不管Element有没有cache存在,controller都有要取得数据,然后assign到Element(view)里,其实不是这样的,Element(view)还可以通过requestAction方法取得数据。它的使用方式是:

controller 代码:

// controllers/comments_controller.php
class CommentsController extends AppController {
    function latest() {
        return $this->Comment->find('all', array('order' => 'Comment.created DESC', 'limit' => 10));
    }
}
 
element 代码
 
// views/elements/latest_comments.ctp
 
$comments = $this->requestAction('/comments/latest');
foreach($comments as $comment) {
    echo $comment['Comment']['title'];
}
 
调用方式:
echo $this->element('latest_comments'); 
或支持cache方式
echo $this->element('latest_comments', array('cache'=>'+1 hour')); 
 

根据官方网站的说明,这种方式如果不使用cache的话,它的效率是很差的

2.     cakephp里的controller的继承结构是这样的:xxxController extends AppController extends Controller, Controller是cakephp框架的,AppController默认是空的类,它是让程序员来自由扩展的, xxxController是页面级别的控制逻辑的,但我一开始发现AppController的类文件app_controller.php在cake/libs/controller目录下,我想既然是让程序员自由扩展的,为什么还要放在cake的libs下呢, 那万一应用程序要升级cakephp的版本,如果没有备份的话,那岂不是把之前扩展的内容都给覆盖了啊,其实不是这样的,你需要做的是在/app/目录下建立一个app_controller.php文件就行了, 更简单的方式就是从/cake/libs/controller把app_controller.php复制到/app目录下, 然后在/app目录下的app_controller.php里进行相应的扩展, 这样的如果升级cakephp就不用担心被覆盖了。