【问题标题】:call a controller function from another controller从另一个控制器调用控制器函数
【发布时间】:2013-11-18 19:06:57
【问题描述】:

我有 2 个controllers,我们称它们为 c1 和 c2。现在我想从 c1 中的函数调用 c2 中的函数,比如说actionC2

我尝试过这样的事情:
$c2_instance = new c2();
$c2_instance->actionC2();

但它不会工作。我收到此错误:Missing argument 1 for CController::__construct().
我做错了什么?

编辑:说它落在第一行也许很重要

【问题讨论】:

  • 调用CController时缺少参数,调用CController($argument)时添加或删除参数。
  • @user488074 虽然这可能是短期的解决方案,但它会在以后给你带来沉重的打击。
  • 你不应该从另一个控制器调用一个控制器“方法”,如果你想共享一个方法,控制器必须只有“动作”使用帮助器
  • 将代码分离到自己的CAction类中,然后两者都可以使用。

标签: php yii controller


【解决方案1】:

你不应该从另一个控制器调用一个控制器。你应该使用这个重定向

$this->redirect(array('controller/action'));

如果你没有别的办法,重新考虑你的设计解决问题,不要试图隐藏。反正它会咬你。

【讨论】:

    【解决方案2】:

    正如@user488074 所说,您的控制器必须有一个参数,当您创建它的实例时它正在寻找它。转到该控制器并查看它在构造函数中查找的内容。如果您不想一直为此控制器传递参数,请在构造函数参数中添加类似的内容

    public function foo($argument = NULL){
    }
    

    所以如果你不想传递一些东西,它有一个默认值。

    【讨论】:

    • @MD.Sahib 的回答对于 yii 框架来说要好得多,但是您可能仍然需要查看您的控制器需要哪些参数来实例化自己并理解这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2017-04-23
    相关资源
    最近更新 更多