CakePHP:使用数组作为参数调用另一个控制器的动作的最佳方法?

Vic*_*cer 27 arrays parameters cakephp cakephp-1.3

在控制器中,调用另一个控制器的操作并将数组作为参数传递的最合适方法是什么?

我知道您可以使用requestAction来调用其他控制器中的操作.但是可以使用请求操作将数组作为参数传递吗?

不,我不想把动作放在App Controller中.所以这对我来说不是解决方案.

我知道的另一种方法是加载另一个控制器,如下所述:http: //book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Configuration.html#importing-controllers-models-组件-行为-视图-和佣工

但是,在将数组作为参数传递时,是否有更简单的方法来调用其他控制器操作?

我是cakePHP的新手,所以任何建议都表示赞赏.谢谢.

小智 29

我不建议使用requestAction方法,而是导入,并实例化所需的控制器.

CakePHP doc讲述了requestAction:

"在控制器或模型中使用很少"

http://book.cakephp.org/view/434/requestAction

导入并加载控制器后,可以使用其参数调用此控制器的任何方法.

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

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

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

  • 定义的变量需要放在一个方法中,或者可能是这个类的构造函数.但除此之外,我认为这是一个比其他答案更清晰的解决方案.谢谢! (2认同)

nei*_*kes 25

您是否适合将逻辑从第二个控制器移动到其模型中,然后在第一个控制器的操作中执行类似的操作?

$var = ClassRegistry::init('SecondModel')->myMethod($array);
$this->set(compact('var'));
Run Code Online (Sandbox Code Playgroud)

然后,在第一个控制器操作的视图中,您可以使用该数据.

我总是试图将控制器方法保持在可以通过浏览器触发的操作中,在模型中放置尽可能多的逻辑,从控制器操作中调用外部模型方法,这些操作需要来自不是该控制器模型的模型的数据,然后使用该数据在我的视图中,如果是经常查看的数据,我会为它创建一个元素.

  • 我不同意.模特应该胖,控制器瘦.尽可能多的逻辑应该放在模型中.您的所有控制器应该处理请求,处理会话,调用模型方法,为视图设置数据和处理用户流等.如果您发现在许多控制器中执行相同的操作,则为其创建组件.顺便说一句,你知道你评论过的评论是由CakePHP的主要开发人员之一编写的吗? (13认同)
  • 尼尔有正确的想法.控制器旨在处理和委派传入的请求.业务逻辑或执行操作的代码应主要位于您的模型中. (4认同)