2012-04-12 86 views
0

我有一個控制器(A)來管理對象,在控制器中我有一個方法來檢查$this->Auth->user(id)是否被允許訪問該對象。
它通過訪問關聯模型($this->ModelA->ModelB->...)完成。cakePHP:如何在另一個控制器中使用一個動作?

現在,在另一個控制器(C)中,我需要檢查相同的問題(對於某些內部邏輯)。但是,此控制器的模型不與ModelB關聯。
所以,我的問題是:如何檢查它? 純SQL是可能的,但我更喜歡避免它。

我看到的唯一途徑,是從另一個控制器調用方法..

回答

0

把邏輯放到在AppController的方法所以這是所有控制器訪問。
在該方法中,如果需要,加載模型:

class AppController extends Controller { 

    protected function isUserAllowed() { 
     if (!isset($this->TheModel)) { 
      $this->loadModel('TheModel'); 
     } 

     ... 
    } 

} 
+0

1)謝謝。 2)如果模型已經加載,它會加載另一個實例,或者它是singelton(比如?)? 3)似乎是錯誤的方式,因爲通過將它添加到appC',我將它加載到每個控制器中,而我只需要在兩個控制器中加載它? – yossi 2012-04-12 09:44:08

+0

@yossi請仔細看一下示例代碼。只有在模型不存在的情況下,該模型才被加載。在調用該方法之前它不會被加載。該方法在被調用之前不會執行任何操作,並且不會通過在那裏但不被調用來添加任何資源。 – deceze 2012-04-12 09:46:09

+0

我的道歉 - 你是對的,你在代碼中照顧它。 ** 這是正確的第二個問題..出於某種原因,我看到'isAuthorized',而不是isUserAllowd ..... ***最後一個問題,appController的方法可以通過瀏覽器地址欄訪問其他方法?而且,保護方向應該解決這個問題? – yossi 2012-04-12 09:51:43

相關問題