2014-09-10 29 views
14

Có thể tiêm tuyến đường-paramter (hoặc một đoạn tuyến) vào bộ điều khiển-constructor không?Có thể truyền tham số tuyến đường tới bộ tạo điều khiển trong Laravel không?

Bạn tìm thấy một số mã để làm rõ câu hỏi của mình.

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

Trả lời

26

Nó không thể tiêm cho họ, nhưng bạn có quyền truy cập vào tất cả trong số họ qua:

class TestController{ 

    protected $_param; 

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

} 
+0

Suy nghĩ của tôi chính xác! Vì vậy, tôi không thể tiêm một đối tượng với một số thuộc tính dựa trên tuyến đường? – former

-1

Cuối cùng, nhưng quan trọng nhất, bạn có thể đơn giản là "kiểu gợi ý" phụ thuộc vào phương thức khởi tạo của lớp được giải quyết bởi vùng chứa, bao gồm bộ điều khiển, trình xử lý sự kiện, công việc xếp hàng, phần mềm trung gian và hơn thế nữa. Trong thực tế, đây là cách hầu hết các đối tượng của bạn được giải quyết bởi vùng chứa.

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

4

Laravel 5.3.28

Bạn không thể tiêm các tham số ... Tuy nhiên, bạn có thể tiêm theo yêu cầu và nhận được nó từ dụ router, như thế này:

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

hoặc đơn giản là '$ request-> param' –

2

Trong Laravel 5.4, bạn có thể sử dụng này để yêu cầu các tham số:

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

hoặc đơn giản là' $ request-> id' –

Các vấn đề liên quan