2014-09-10 79 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

相关问题