对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就不用担心被覆盖了。

1 thought on “对cakephp的几点疑惑和误解”

  1. You could certainly see your expertise within the work you write. The arena hopes for even more passionate writers like you who aren’t afraid to mention how they believe. At all times follow your heart.

Comments are closed.