È possibile chiamare un metodo da un controller all'interno di un altro controller in Laravel 5 (indipendentemente dal metodo http utilizzato per accedere a ciascun metodo)?Chiama un metodo da un controller all'interno di un altro
risposta
Ecco come l'ho fatto. Utilizzare la parola chiave use
per rendere disponibile OtherController. Quindi puoi chiamare un metodo da quella classe in istanza.
<?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();
}
}
Verificate anche il concetto di un Command in laravel. Potrebbe darti più flessibilità rispetto al metodo sopra.
Questo è quello che ho pensato di fare, ma mi chiedo come passare 'Inputs'? –
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;
}
}
Questo crea solo un altro controller e chiama il suo metodo. Anche la direzione della chiamata è inversa anche a ciò che è scritto nei commenti –
La tecnica L4 su http://stackoverflow.com/questions/15205239/call-a-controller-in-laravel-4 probabilmente funzionerà ancora. – ceejayoz
Sei sicuro che in qualche modo potresti farlo, ma se ti trovi nella situazione in cui devi farlo, è un grande odore di codice! Estrarre la funzionalità necessaria in una classe separata e quindi iniettarla nei controller. – Quasdunk
Questo è un grande no-no! Dovresti rifrattore e creare una classe per quello scopo, o una classe astratta ed estendere tutti i tuoi controllori da esso –