CakePHP扩展控制器和重写方法

时间:2011-09-22 20:17:09

标签: php model-view-controller cakephp

我正在处理一个应用程序,大部分代码将在未来的项目中返回。所以我的想法是创建一个像这样的结构:

App/
- controllers
- models
- ...
Cake/
My_Custom_Folder/
- controllers
- models 
- ..

基本上我想在普通App文件夹旁边添加另一个文件夹,并使用App :: build()来设置额外文件夹控制器,模型等的路径。

现在我的目标是仅在我的项目需要自定义工作时才使用App层,我已经成功完成了,并且如果它们在那里,CakePHP将App中的控制器与My_Custom_Folder中的控制器相连。

例如:如果我在My_Custom_Folder中有一个pages_controller.php而在我的App文件夹中有一个,它将使用App文件夹中的那个。如果App文件夹中没有,则它使用My_Custom_Folder中的那个。

然而,这不是我希望它工作的方式,我想要做的是从My_Custom_Folder扩展控制器,以便我可以覆盖方法和/或添加新方法。

到目前为止,我已尝试过以下内容:

/My_Custom_Folder/pages_controller.php

Class PagesController Extends AppController {

    Public $name = 'Pages';

    Public Function home(){
        echo 'default home';
    }
}

/App/pages_controller.php

require_once(ROOT . DS . 'My_Custom_Folder' . DS . 'controllers' . DS . 'pages_controller.php');

Class AppPagesController Extends PagesController {

    Public Function home(){
        echo 'Override default home';
    }
}

不幸的是,这不起作用,它仍然加载默认的主页。基本上我想要的是它从My_Custom_Folder加载所有方法,并允许App文件夹覆盖方法和/或添加方法,就像扩展Appcontroller一样。它确实加载了两个文件,但它没有覆盖任何函数。

这样的结构很适合在许多项目中维护相同的代码,并允许我通过更新My_Custom_Folder轻松地为所有项目添加新功能,并且它不会破坏具有一些自定义代码的项目。

对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

查看插件或行为或组件或帮助程序。使用插件,您可以将它们放在所有应用程序的一个公共文件夹中(就像您的My_Custom_Folder一样)。