6

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

这样我的控制器,例如 UsersController 扩展 SecureController 和 SecureController 扩展 AppController。

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

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

我正在考虑将所有 beforeFilter 安全性内容放入 SecureController - 这样任何需要安全性的控制器都可以简单地扩展它,而其他控制器则直接从 AppController 继承。

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

在此先感谢,肯。

4

2 回答 2

6

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

如果这不合适,那么我会选择你的路线,为了做到这一点,只需 include('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 {} ?>
于 2009-12-09T21:12:44.480 回答
1

我也一直在尝试这个。用任何其他控制器扩展任何控制器似乎都相对简单。在 Cake 2.0 中,您只需使用import()语句(include() 做类似的事情)。

App::import('Controller', 'Security');
class SecureAreaController extends SecurityController {
    // extra functionality *not* in base class goes here
}
于 2011-12-07T22:59:32.140 回答