2015-04-20 7 views
7

Ist es möglich, eine Methode von einem Controller in einem anderen Controller in Laravel 5 aufzurufen (unabhängig von der http-Methode, die für den Zugriff auf die einzelnen Methoden verwendet wird)?Aufruf einer Methode von einem Controller innerhalb eines anderen

+0

Die L4-Technik unter http://stackoverflow.com/questions/15205239/call-a-controller-in-laravel-4 funktioniert wahrscheinlich noch. – ceejayoz

+1

Sie könnten das sicher tun, aber wenn Sie in der Situation sind, in der Sie das tun müssen, ist das ein großer Code-Geruch! Extrahieren Sie die benötigte Funktionalität in eine separate Klasse und injizieren Sie sie anschließend in Ihre Controller. – Quasdunk

+0

Das ist ein großes No-No! Sie sollten das Refraktor und eine Klasse für diesen Zweck oder eine abstrakte Klasse erstellen und alle Ihre Controller daraus erweitern. –

Antwort

17

So habe ich es gemacht. Verwenden Sie das Schlüsselwort use, um den OtherController verfügbar zu machen. Dann können Sie eine Methode aus dieser Klasse zur Instanziierung aufrufen.

<?php namespace App\Http\Controllers; 

use App\Http\Controllers\OtherController; 

class MyController extends Controller { 

    public function __construct() 
    { 
     //Calling a method that is from the OtherController 
     $result = (new OtherController)->method(); 
    } 
} 

Auch das Konzept eines Command in Laravel überprüfen. Es könnte Ihnen mehr Flexibilität als die obige Methode geben.

+0

Das ist, was ich dachte, aber ich frage mich, wie man 'Inputs' übergibt? –

0
use App\Http\Controllers\TargetsController; 

// this controller contains a function to call 
class OrganizationController extends Controller { 
    public function createHolidays() { 
     // first create the reference of this controller 
     $b = new TargetsController(); 
     $mob = 9898989898; 
     $msg = "i am ready to send a msg"; 

     // parameter will be same 
     $result = $b->mytesting($msg, $mob); 
     log::info('my testing function call with return value' . $result); 
    } 
} 

// this controller calls it 
class TargetsController extends Controller { 
    public function mytesting($msg, $mob) { 
     log::info('my testing function call'); 
     log::info('my mob:-' . $mob . 'my msg:-' . $msg); 
     $a = 10; 
     return $a; 
    } 
} 
+0

Dies erstellt nur einen anderen Controller und ruft seine Methode auf. Auch die Richtung des Anrufs ist entgegengesetzt zu dem, was in Kommentaren geschrieben wird –