扩展控制器和重写方法


CakePHP Extending Controllers and Overriding Methods

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

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

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

现在的目标是仅在我的项目需要自定义工作时使用应用程序层,我已经成功地做到了这一点,CakePHP将应用程序中的控制器放在My_Custom_Folder中的控制器上,如果它们存在的话。

例如:如果我有一个pages_controller.php在My_Custom_Folder和一个在我的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';
    }
}

不幸的是,这不起作用,它仍然加载默认的home。基本上我想让它从My_Custom_Folder中加载所有方法,并允许App文件夹覆盖方法和/或添加方法,就像你通过扩展Appcontroller一样。它会加载两个文件,但不会覆盖任何函数。

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

看看插件或行为或组件或帮助程序。有了插件,你可以把它们放在一个公用文件夹的所有应用程序(就像你的My_Custom_Folder)。