2011-10-13 87 views
0

我有一個管理控制器,我想利用其他控制器中的功能(這些功能不代表某人會在瀏覽器中加載的頁面),但它無法利用這些功能,因爲其他控制器中的功能是私有的。它們是私人的,因爲我不希望公衆訪問它們。有沒有辦法讓一個控制器功能無法訪問公衆而沒有將該功能設置爲私有或保護?CakePHP:使控制器功能不可訪問

回答

3
public function __blah(){ 
// function that can't be accessed from outside, but can be called from other functions 
} 
+0

以一個或多個下劃線爲前綴的方法被路由器忽略,因此用於在您的控制器中創建實用程序功能的理想方式;在PHP4中。如果他們不想被訪問,爲什麼不讓他們保護?另外(因爲TS講的是一些「管理控制器」),該方法需要在AppController中供其他控制器訪問它,否則顯然無法在不導入其他控制器的情況下訪問它們(如果你這樣做,你做錯了;])。 –

0

是的。

關於ACL(訪問控制列表),您在CakePHP Book中有很多信息,這正是您要查找的內容。您可以使用Auth組件。

+0

我不想製作只有auth的頁面(控制器/函數)。我在控制器中具有更多與該控制器相關的輔助函數的功能,該控制器不代表頁面。我不希望這些功能可以被公衆使用,但我希望能夠從我的管理員控制器調用這些功能來執行該功能。 – cyphun

+0

你可以用ACL來做 –

2

基於我在回答彼得給你的評論已經閱讀:

您不使用管理控制器。你想用管理員的前綴: http://book.cakephp.org/view/950/Prefix-Routing

和認證: http://book.cakephp.org/view/1250/Authentication

如果你打電話 - 和多數民衆贊成你的意見怎麼聽起來像 - 一個控制器從另一個你正在做的事情完全錯誤的在MVC框架。如果它應該是可重用的代碼,它應該進入組件,如果它是關於管理操作使用前綴路由和admin_ *方法,認證組件和保護方法爲你所謂的「幫手」方法。

+0

我從來不知道如何說出這些問題。但我擁有的是一個處理用戶相關功能的控制器,例如更改用戶的密碼。它屬於用戶控制器。我現在想添加一個管理控制器,但我希望它能夠利用用戶控制器中的私有功能。你的回答結束似乎很有趣,但我不確定我真的明白你的意思。感謝您的迴應。 – cyphun

+0

burzum是正確的,前綴路由是你在找什麼。儘管URL'/ users/add'映射到UsersController中的函數'add','/ admin/users/add'將映射到UsersController中的'admin_add'。然後,您可以通過檢查AppController中的「admin」前綴URL參數來以任何方式要求授權。 –

+0

說實話,我不知道如何解釋它比我提供的兩個鏈接更好。但首先,你知道MVC的含義以及它的工作原理嗎? – burzum

0

我看到三個可能的解決方案(它們也可以合併):

第一個解決方案是將要重用到components(如提及Burzum的)的代碼。

第二種解決方案取決於您的代碼。您可能會在控制器中執行一些應該在模型中完成的任務。在這種情況下,將相應的代碼移到模型中。

第三種解決方案是將要重用的代碼放入普通的舊PHP類和load them as vendor files