【问题标题】:CakePHP controller action from another controller来自另一个控制器的 CakePHP 控制器动作
【发布时间】:2013-08-11 04:49:14
【问题描述】:

我有以下控制器:

App::import('Controller', 'Users');
class EmployeesController extends  AppController
{

}

现在another StackOverflow question 说要执行以下操作:

<?php
//Import controller
App::import('Controller', 'Posts');

class CommentsController extends AppController {
    //Instantiation
    $Posts = new PostsController;
    //Load model, components...
    $Posts->constructClasses();

    public function index($passArray = array(1,2,3)) {
        //Call a method from PostsController with parameter
        $Posts->doSomething($passArray);
    }
}
?>

但是,如果我尝试将其复制到我的代码中,我的代码如下所示:

App::import('Controller', 'Users');

class EmployeesController extends  AppController {

    public $name = 'Employee';
    $Users = new UsersController;

我得到一个语法错误,如果我仍然运行它,我会得到一个致命错误。

所以我的问题是如何从另一个控制器调用函数?

【问题讨论】:

  • 你在那里做的事情是非常错误的。您可能永远不会像这样在其他人中包含控制器。使用模型或组件来共享功能。还要删除 $name 的东西。在您的情况下,无论如何它都宣布错误。你也不要在 CakePHP2.x 中使用 App::import()。 PS:您应该始终提及您正在使用的确切 cakephp 版本。

标签: php cakephp


【解决方案1】:

你没有。

从您链接到的问题中阅读已接受的答案,这是正确的。而且,Mark Story(CakePHP 核心贡献者)在 cmets 中支持它。

我不确切知道您的要求是什么,但您几乎可以肯定希望将逻辑移动到您的模型中。在 MVC 中,始终认为“胖模型,瘦控制器”。

如果您有更多问题,请在 cmets 中提问或更新您的问题,我会更新我的答案并提供更多信息。

【讨论】:

  • 我也是 cakePHP 核心开发者——但不是 Mark Story(而是 Mark Scherer^^)。
  • 是的,我知道...我在看到您的评论之前写下了我的答案...??
  • 所以我的逻辑实际上是一个添加函数,它首先将用户添加到用户表中,然后应该返回一个 id 以便我可以将其插入到员工表中,这可以从模型中实现吗?对不起,我对蛋糕很陌生。
  • 啊,马克,我明白你在说什么。我指的是他所链接的问题的公认答案中的 cmets。 Mark Story(不是您)赞同该问题的公认答案。
  • Marc Rasmussen,听起来您首先需要让我们具体知道您想要做什么 - 比如,从最高级别的角度来看,然后您可以获得最佳方式的建议去做吧。但是,是的,在模型中是可能的。如果您愿意,请跳转到#cakephp IRC 频道并在那里询问...
猜你喜欢
  • 1970-01-01
  • 2012-04-24
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
相关资源
最近更新 更多