Laravel で Controller から Controller を呼ぶ
@syossan27 やりたいことがピンときませんが、処理が終わったらもう一つのアクションにリダイレクトしてみてはいかがでしょうか?
— MATSUO Masaru (@localdisk) 2014, 5月 12たまーに、こんなことしたいことがありますね。で、まぁリダイレクトすればいいよ、みたいな回答したんですが、よく考えたら普通にできるよなーと。
まず、呼び出される CalledController.
<?php class CalledController extends \BaseController { protected $user; public function __construct(User $user) { $this->user = $user; } public function getUser() { return $this->user; } }
この getUser を呼び出したいとします。
で、呼び出す側。CallController はこんな実装になります。
<?php class CallController extends \BaseController { public function getIndex() { $called = app()->make('CalledController'); $user = $called->getUser(); var_dump($user); } }
app()->make('CalledController') でコンテナ経由で CalledController のインスタンスを取得しています。なので CalledController に定義されているコンストラクタインジェクションが機能しててちゃんとインジェクションされた User クラスが取得できるわけです。
もちろんコンストラクタで CalledController をインジェクションすることもできます。
<?php class CallController extends \BaseController { protected $called; public function __construct(CalledController $called) { $this->called = $called; } public function getIndex() { $user = $this->called->getUser(); var_dump($user); } }
まぁ、Controller から別の Controller のメソッドを呼びたいというシチュエーションが発生した場合、リファクタリングのチャンスと思ってリファクタリングしたほうがいいんじゃないかなーと思います。色々あってそうも行かない時等にこのエントリを思い出していただければ幸い。