【问题标题】:temporarily disable controller redirect暂时禁用控制器重定向
【发布时间】:2013-10-23 15:57:53
【问题描述】:

我正在尝试重新使用插件的控制器方法来添加用户(插件是 usermgmt,购买的插件)。该插件的方法可以满足我的所有需求,但是它通过重定向到另一个页面来完成。

我不想修改插件代码,想知道是否可以暂时禁用Controller:redirect方法

class MyController extends AppController{
    function signUpUser(){
        //populate $this->request->data to be what plugin controller method is looking for

        //temporarily disable Controller::redirect

        //make call to plugin's controller method
        $usersController = new UsersController();
        $usersController->constructClasses();
        $usersController->addUser();

        //re-enable Controller::redirect

        //Do my own redirect
        $this->redirect('/welcome');
    }
}

【问题讨论】:

    标签: cakephp controller cakephp-2.4


    【解决方案1】:

    您不应该那样使用控制器,可能有一个模型或组件可供您使用。扩展用户控制器也可能是一种选择。不管怎样,既然你说你已经买了,为什么不联系支持,他们应该最了解他们的东西是如何工作的?

    话虽如此,让我回答实际问题。为了能够通过控制器禁用重定向,您必须重写 Controller::redirect() 方法并实现一些允许您禁用该功能的逻辑。

    这是一个未经测试的示例,它使用一个属性来定义是否启用重定向:

    public $redirectEnabled = true;
    
    public function redirect($url, $status = null, $exit = true) {
        if($this->redirectEnabled) {
            parent::redirect($url, $status, $exit);
        }
    }
    

    这应该是不言自明的。 在您的控制器中,您可以将 $this->redirectEnabled 设置为 true/false 以启用/禁用重定向功能。

    【讨论】:

    • 首先,您的答案/示例代码确实回答了我的问题。这是我拥有的两个几乎可行的解决方案之一。插件作者选择了一些不可扩展的编码方式(因此没有可重用的组件(无论是胖模型还是组件)),所以我最终几乎在自己的控制器中复制了他的方法。不理想......但它现在可以工作了。
    猜你喜欢
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2019-10-06
    • 2017-10-08
    • 2011-12-30
    • 2011-06-14
    • 2013-11-30
    相关资源
    最近更新 更多