【问题标题】:cakePHP: how to use an action from one controller in another?cakePHP:如何在另一个控制器中使用一个控制器的动作?
【发布时间】:2012-04-24 14:48:01
【问题描述】:

我有一个控制器 (A) 来管理一个对象,在控制器中我有一个方法来检查是否允许 $this->Auth->user(id) 访问该对象。
它是通过访问关联模型 ($this->ModelA->ModelB->...) 来完成的。

现在,在另一个控制器 (C) 中,我需要检查相同的问题(对于某些内部逻辑)。但是,此控制器的模型与 ModelB 无关。
所以,我的问题是:如何检查它? 纯 SQL 是可能的,但我更愿意避免它。

我看到的唯一方法是从另一个控制器调用该方法..

【问题讨论】:

    标签: methods controller cakephp-1.3


    【解决方案1】:

    将逻辑放入AppController 中的方法中,以便所有控制器都可以访问它。
    在该方法中,如有必要,加载模型:

    class AppController extends Controller {
    
        protected function isUserAllowed() {
            if (!isset($this->TheModel)) {
                $this->loadModel('TheModel');
            }
    
            ...
        }
    
    }
    

    【讨论】:

    • 1) 谢谢。 2)如果模型已经加载,它将加载另一个实例或者它是一个单例(比如?)? 3)似乎这是错误的方式,因为通过将其添加到 appC',我将它加载到每个控制器中,而我只需要在两个控制器中使用它?
    • @yossi 请仔细查看示例代码。仅当模型尚不存在时才加载该模型。在调用该方法之前不会加载它。该方法在被调用之前不会做任何事情,并且不会仅仅因为存在而不被调用而添加任何资源。
    • 我的道歉 - 你是对的,你在代码中处理了它。 ** 第二个问题是正确的.. 出于某种原因,我看到了“isAuthorized”而不是 isUserAllowd ..... *** 最后一个问题,appController 的方法可以通过浏览器地址栏作为其他方法访问吗?而且,受保护的方向是否应该解决这个问题?
    • 确实,protected 肯定 解决了这个问题,但也许 Cake 不会让 AppC 方法一开始就可以访问。不过,这不是 100% 确定的。
    猜你喜欢
    • 2011-09-30
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多