Cakephp:抽象AppController另一个层次,可能吗?

Ken*_*Ken 6 oop model-view-controller abstraction controller cakephp

我想知道是否有可能在AppController和我的应用程序的其他控制器之间添加另一个抽象控制器?

因此我的控制器,例如UsersController扩展了SecureController,SecureController扩展了AppController.

此外,我希望能够让其他控制器直接扩展AppController:SomeNonSecureController扩展AppController.

这是因为我当前的AppController在其beforeFilter中有各种各样的Auth和ACL内容,但我也有不需要安全性的控制器(在所有需要安全性之前,没有添加新的规范)..但是因为一些许多控制器确实需要它,将代码复制粘贴到所有需要的控制器是没有意义的.

我想把所有的beforeFilter安全内容都安装到SecureController中 - 这样任何需要安全性的控制器都会简单地扩展它,而其他控制器直接从AppController继承.

你会如何继续做这样的事情?

谢谢,肯.

nei*_*kes 6

我的第一个想法是看看我是否可以将beforeFilter中的一些功能抽象为一个组件 - 记住组件也可以使用其他组件,只需将它们包含在组件的$ components属性中,这样就可以访问AuthComponent和AclComponent等.

如果这不合适那么我会去你的路线,为了做到这一点,只需包括('secure_controller.php'); 在你的文件中的单个控制器类声明之前.

我通过创建一个我在所有项目中使用的BaseController做了类似的事情,它提供了我标准的所有管理CRUD操作.然后我让我的AppController扩展它包含特定于应用程序,控制器范围的功能,然后各个控制器扩展它,并最终实际上是空的.我所做的就是:

// app/base_controller.php
<?php class BaseController extends Controller {} ?>

// app/app_controller.php
<?php
include('base_controller.php');
class AppController extends BaseController {}
?>

// app/controllers/my_controller.php
<?php class MyController extends AppController {} ?>
Run Code Online (Sandbox Code Playgroud)