2014-09-10 78 views
14

是否可以向控制器構造函數注入路由參數(或路由段)?是否可以將路由參數傳遞給Laravel中的控制器構造函數?

你找到一些代碼來澄清我的問題。

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'); 

回答

26

這是不可能注入它們,但你必須通過訪問所有的人:

class TestController{ 

    protected $_param; 

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

} 
+0

我的想法確切! 所以我不能注入基於路線的一些屬性的對象? – former 2014-09-10 13:41:20

-1

最後,但最重要的,你可以簡單地「的類型提示」中的相關性由容器解析的類的構造函數,包括控制器,事件偵聽器,隊列作業,中間件等等。在實踐中,這是大多數對象由容器解析的方式。

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

4

Laravel 28年3月5日

你不能注入參數... 但是,你可以注入的請求,並從路由器實例得到它,就像這樣:

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

或簡單的'$ request-> param' – 2017-07-13 04:36:53

2

Laravel 5.4,你可以用它來請求參數:

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

或者簡單的'$ request-> id' – 2017-07-13 04:38:00

相關問題