Is it possible to pass a route parameter to contro

2019-04-18 16:53发布

Is it possible to inject a route-paramter (or an route segment) to the controller-constructor?

You find some code to clarify my question.

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

4条回答
Rolldiameter
2楼-- · 2019-04-18 17:21

In Laravel 5.4, you can use this to request the parameter:

public function __construct(Request $request) {
   $id = $request->get("id");
}
查看更多
SAY GOODBYE
3楼-- · 2019-04-18 17:26

Laravel 5.3.28

You can't inject the parameter... But, you can inject the request and get it from the router instance, like this:

//route: url_to_controller/{param}
public function __construct(Request $request)
{
   $this->param = $request->route()->parameter('param');
}
查看更多
可以哭但决不认输i
4楼-- · 2019-04-18 17:42

It's not possible to inject them, but you have access to all of them via:

class TestController{

    protected $_param;

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

}
查看更多
姐就是有狂的资本
5楼-- · 2019-04-18 17:42

Lastly, but most importantly, you may simply "type-hint" the dependency in the constructor of a class that is resolved by the container, including controllers, event listeners, queue jobs, middleware, and more. In practice, this is how most of your objects are resolved by the container.

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

查看更多
登录 后发表回答