2012-04-12 87 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

相关问题