コントローラーで、別のコントローラーのアクションを呼び出し、配列をパラメーターとして渡す最も適切な方法は何ですか?
RequestActionを使用して、他のコントローラー内でアクションを呼び出すことができることを知っています。しかし、リクエストアクションを使用して配列をパラメータとして渡すことは可能ですか?
いいえ、アクションをApp Controllerに入れたくありません。だからそれは私にとって解決策ではありません。
私が知っている他の唯一の方法は、以下で説明するように他のコントローラーをロードすることです: http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Configuration.html#importing- controllers-models-components-behaviors-views-and-helpers
しかし、配列をパラメーターとして渡しながら、他のコントローラーアクションを呼び出す簡単な方法はありますか?
私はcakePHPが初めてなので、どんな提案でも歓迎します。ありがとう。
ロジックを2番目のコントローラーからそのモデルに移動し、最初のコントローラーのアクションでこのようなことをするのが適切でしょうか?
$var = ClassRegistry::init('SecondModel')->myMethod($array);
$this->set(compact('var'));
次に、最初のコントローラーのアクションのビューで、そのデータを使用できます。
ブラウザーを介してヒットできるアクションにコントローラーメソッドを保持し、モデルにできるだけ多くのロジックを配置し、そのコントローラーのモデルではないモデルのデータを必要とするコントローラーアクションから外部モデルメソッドを呼び出し、そのデータを使用するように常に心がけています私のビューでは、頻繁に表示されるデータの場合は、そのための要素を作成します。
メソッドrequestActionを使用するのではなく、インポートし、必要なコントローラーをインスタンス化することをお勧めします。
CakePHPのドキュメントは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);
}
}
?>
CakePHP 1.2.5では、requestAction()の2番目のパラメーターを介してさまざまなパラメータータイプを渡すことができるはずです。例えば。:
$this->requestAction('/users/view', array('pass' => array('123')));
次に、UsersControllerで:
function view($id) {
echo $id; // should echo 123 I believe, otherwise try $this->params['pass'].
}
上記の「pass」を使用する代わりに、「form」と「named」を使用して、それぞれform/namedパラメーターを渡すことができます。
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);
}
}