Laravel: Load method in another controller without changing the url Laravel: Load method in another controller without changing the url php php

Laravel: Load method in another controller without changing the url


You can use (L3 only)

Controller::call('ApplesController@getSomething');

In L4 you can use

$request = Request::create('/apples', 'GET', array());return Route::dispatch($request)->getContent();

In this case, you have to define a route for ApplesController, something like this

Route::get('/apples', 'ApplesController@getSomething'); // in routes.php

In the array() you can pass arguments if required.


( by neto in Call a controller in Laravel 4 )

Use IoC...

App::make($controller)->{$action}();

Eg:

App::make('HomeController')->getIndex();

and you may also give params

App::make('HomeController')->getIndex($params);


You should not. In MVC, controllers should not 'talk' to each other, if they have to share 'data' they should do it using a model, wich is the type of class responsible for data sharing in your app. Look:

// route:Route::controller('/', 'PearsController');// controllersclass 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

What you can do instead is to use BaseController to create common functions to be shared by all your controllers. Take a look at commonFunction in BaseController and how it's used in the two controllers.

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();    }}