[Arrays] CakePHP: Der beste Weg, eine Aktion eines anderen Controllers mit Array als Parameter aufzurufen?


Answers

Ich würde nicht empfehlen, die Methode requestAction zu verwenden, sondern den benötigten Controller zu importieren und instanziieren.

CakePHP doc sagt über requestAction, dass:

"Es ist selten sinnvoll, in einem Controller oder Modell zu verwenden"

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

Sobald Sie den Controller importiert und geladen haben, können Sie jede Methode dieses Controllers mit seinen Parametern aufrufen.

<?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);
    }
  }
?>
Question

Was ist in einer Steuerung am besten geeignet, um die Aktion eines anderen Controllers aufzurufen und ein Array als Parameter zu übergeben?

Ich weiß, dass Sie requestAction verwenden können, um Aktionen innerhalb anderer Controller aufzurufen. Aber ist es möglich, Arrays als Parameter mit Request-Aktion zu übergeben?

Und nein, ich möchte die Aktion nicht in den App Controller übertragen. Das ist also keine Lösung für mich.

Der einzige andere Weg, den ich kenne, ist, den anderen Controller zu laden, wie in http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Configuration.html#importing-controllers-models- beschrieben. Komponenten-Verhalten-Ansichten-und-Helfer

Aber gibt es eine einfachere Möglichkeit, die andere Controller-Aktion aufzurufen, während ein Array als Parameter übergeben wird?

Ich bin neu in CakePHP, also wird jeder Vorschlag geschätzt. Vielen Dank.




CakePHP 2.X:

<?php
App::uses('AppController', 'Controller');
App::uses('PostsController', 'Controller');

class CommentsController extends AppController {

    public function index($parameter = null){
        //Instantiate
        $Posts = new PostsController();
        //Load model, components...
        $Posts->constructClasses();

        //Call a method of Posts passing a parameter
        $Posts->aMethod($parameter);
    }
}