2015-04-20 15 views
7

È 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

+0

La tecnica L4 su http://stackoverflow.com/questions/15205239/call-a-controller-in-laravel-4 probabilmente funzionerà ancora. – ceejayoz

+1

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

+0

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 –

risposta

17

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.

+0

Questo è quello che ho pensato di fare, ma mi chiedo come passare 'Inputs'? –

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

Questo crea solo un altro controller e chiama il suo metodo. Anche la direzione della chiamata è inversa anche a ciò che è scritto nei commenti –

Problemi correlati