私はこのルートを持っています:Route::controller('/', 'PearsController');
Laravel=でPearsControllerが別のコントローラーからメソッドをロードしてURLが変わらないようにすることは可能ですか?
例えば:
// route:
Route::controller('/', 'PearsController');
// controllers
class PearsController extends BaseController {
public function getAbc() {
// How do I load ApplesController@getSomething so I can split up
// my methods without changing the url? (retains domain.com/abc)
}
}
class ApplesController extends BaseController {
public function getSomething() {
echo 'It works!'
}
}
使用できます(L3のみ)
_Controller::call('ApplesController@getSomething');
_
_L4
_で使用できます
_$request = Request::create('/apples', 'GET', array());
return Route::dispatch($request)->getContent();
_
この場合、次のようなApplesController
のルートを定義する必要があります
_Route::get('/apples', 'ApplesController@getSomething'); // in routes.php
_
array()
では、必要に応じて引数を渡すことができます。
( neto in コントローラーをLaravel 4 で呼び出し)
IoCを使用...
App::make($controller)->{$action}();
例えば:
App::make('HomeController')->getIndex();
また、パラメータを与えることもできます
App::make('HomeController')->getIndex($params);
貴方はするべきではない。 MVCでは、コントローラーは互いに「通信」するべきではありません。モデルを使用して「データ」を共有する必要がある場合、アプリでのデータ共有を担当するクラスのタイプです。見て:
// route:
Route::controller('/', 'PearsController');
// controllers
class PearsController extends BaseController {
public function getAbc()
{
$something = new MySomethingModel;
$this->commonFunction();
echo $something->getSomething();
}
}
class ApplesController extends BaseController {
public function showSomething()
{
$something = new MySomethingModel;
$this->commonFunction();
echo $something->getSomething();
}
}
class MySomethingModel {
public function getSomething()
{
return 'It works!';
}
}
[〜#〜] edit [〜#〜]
代わりにできることは、BaseControllerを使用して、すべてのコントローラーで共有される共通の関数を作成することです。 commonFunction
のBaseController
と、2つのコントローラーでの使用方法を見てください。
abstract class BaseController extends Controller {
public function commonFunction()
{
// will do common things
}
}
class PearsController extends BaseController {
public function getAbc()
{
return $this->commonFunction();
}
}
class ApplesController extends BaseController {
public function showSomething()
{
return $this->commonFunction();
}
}
AbcdController
にいて、OtherController
に存在するpublic function test()
メソッドにアクセスしようとすると、次のようにできます。
$getTests = (new OtherController)->test();
これはL5.1で動作するはずです