2009-12-09 39 views
6

我想知道是否有可能在AppController和我的應用程序的其他控制器之間添加另一個抽象控制器?Cakephp:抽象AppController另一個級別,可能嗎?

因此,我的控制器,例如UsersController擴展了SecureController ,SecureController擴展了AppController。

另外我想能夠讓其他控制器直接擴展AppController: SomeNonSecureController擴展了AppController。

這是因爲我目前的AppController在其beforeFilter中有各種Auth和ACL的東西,但我也有控制器不需要安全性的東西(在所有需要安全性之前,沒有添加新的規範)。 但由於有些許多控制器確實需要它,因此將代碼複製粘貼到所有需要的控制器是沒有意義的。

我在想,但所有beforeFilter安全的東西到SecureController - 這樣任何控制器需要安全簡單的擴展它,而其他人直接從AppController繼承。

你會如何去做這樣的事情嗎?

在此先感謝, 肯。

回答

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 {} ?> 
+0

這裏是我的問題,我需要建立一個應用程序,是具有2個webroots:一個/ admin,然後一個/ PRO 但他們需要共享相同/應用程序文件夾模式和這樣的。 現在/ admin下的所有內容都需要使用Auth和ACL進行安全保護,而/ pro不需要(可能只有少數幾個控制器)。 你會如何建議去做這件事? 順便說一句,我是肯從你的評論ACL博客帖子:)感謝您的答覆! – Ken 2009-12-10 10:13:10

+0

嗯,我可能會升級到1.3,然後使用Routing.prefixes來處理不同的URL前綴,並堅持使用相同的模型和控制器的所有領域。然後使用AuthComponent :: allowedActions屬性來切換哪些操作需要授權。或者我錯過了這個觀點? – neilcrookes 2009-12-10 15:44:21

+0

那麼可能會工作(真的不知道有關Routing.prefixes的任何信息) - 但1.3仍然是阿爾法,這是一個生產使用的應用程序,所以我不能冒險。需要找到一個1.2.5的解決方案: - \ – Ken 2009-12-11 12:20:38

1

我剛剛也嘗試過這個。用任何其他控制器擴展任何控制器似乎相對簡單。在Cake 2.0中,您只需使用import()語句(include()做類似的事情)。

App::import('Controller', 'Security'); 
class SecureAreaController extends SecurityController { 
    // extra functionality *not* in base class goes here 
} 
+1

App :: import至少在Cake 1的早期工作。2 – 2012-05-07 19:49:33

+0

其實......我認爲'App :: uses('SecurityController','Controller')'實際上是這樣做的正確方法(至少Cake是如何在它們的lib中執行的)。不知道有什麼區別。 – 2012-05-07 23:47:06

+0

此外,我最近的實驗似乎表明,這種繼承結構的工作原理相當好,除了類變量,例如'$ helpers','$ components'等,它們在子類中實際被重寫並且沒有被合併,因爲Cake傾向於使用AppController。你可以改變'$ _mergeParent',但最好的選擇是改變你的父類(AppController的子類),以在'__construct()'中添加/合併helper和組件。 – 2012-05-07 23:51:45

相關問題