2014-09-10 7 views
14

È possibile iniettare un parametro di percorso (o un segmento di percorso) al costruttore del controllore?È possibile passare un parametro route al costruttore di controller in Laravel?

Si trova qualche codice per chiarire la mia domanda.

class TestController{ 

    protected $_param; 

    public function __construct($paramFromRoute) 
    { 
     $this->param = $paramFromRoute; 
    } 

    public function testAction() 
    { 
     return "Hello ".$this->_param; 
    } 
} 

---------------------------------------------------- 

App::bind('TestController', function($app, $paramFromRoute){ 
    $controller = new TestController($paramFromRoute); 
    return $controller; 
}); 

---------------------------------------------------- 

// here should be some magic 
Route::get('foo/{bar}', 'TestController'); 

risposta

26

Non è possibile iniettare loro, ma si ha accesso a tutti loro via:

class TestController{ 

    protected $_param; 

    public function __construct() 
    { 
     $id = Route::current()->getParameter('id'); 
    } 

} 
+0

I miei pensieri esattamente! Quindi non è possibile iniettare un oggetto con alcune proprietà in base al percorso? – former

-1

Infine, ma cosa più importante, si può semplicemente "tipo-suggerimento" la dipendenza in il costruttore di una classe che viene risolto dal contenitore, inclusi controllori, listener di eventi, lavori in coda, middleware e altro. In pratica, questo è il modo in cui la maggior parte degli oggetti viene risolta dal contenitore.

http://www.golaravel.com/laravel/docs/5.1/container/

4

laravel 5.3.28

Non si può iniettare il parametro ... Ma, è possibile iniettare la richiesta e ottenere da l'istanza router, in questo modo:

//route: url_to_controller/{param} 
public function __construct(Request $request) 
{ 
    $this->param = $request->route()->parameter('param'); 
} 
+1

o semplicemente '$ request-> param' –

2

In laravel 5,4, è possibile utilizzare questo per richiedere il parametro:

public function __construct(Request $request) { 
    $id = $request->get("id"); 
} 
+3

o semplicemente' $ request-> id' –

Problemi correlati