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
Antwort
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.
Das ist, was ich dachte, aber ich frage mich, wie man 'Inputs' übergibt? –
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;
}
}
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 –
Die L4-Technik unter http://stackoverflow.com/questions/15205239/call-a-controller-in-laravel-4 funktioniert wahrscheinlich noch. – ceejayoz
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
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. –