是否可以将路由参数传递给Laravel中的控制器构造函数?

chm*_*ers 17 php dependency-injection laravel laravel-4

是否可以将路由参数(或路径段)注入控制器构造函数?

你找到一些代码来澄清我的问题.

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'); 
Run Code Online (Sandbox Code Playgroud)

Ant*_*iro 30

注入它们是不可能的,但您可以通过以下方式访问所有这些内容:

class TestController{

    protected $_param;

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

}
Run Code Online (Sandbox Code Playgroud)

  • 在 Laravel > 5.4 方法 getParameter() 替换为 parameter(),参考:https://github.com/laravel/framework/issues/17550 (3认同)

Eru*_*o87 9

Laravel 5.3.28

你不能注入参数......但是,你可以注入请求并从路由器实例获取它,如下所示:

//route: url_to_controller/{param}
public function __construct(Request $request)
{
   $this->param = $request->route()->parameter('param');
}
Run Code Online (Sandbox Code Playgroud)

  • 或者只是`$ request-> param` (2认同)

Gab*_*oca 5

Laravel 5.4 中,您可以使用它来请求参数:

public function __construct(Request $request) {
   $id = $request->get("id");
}
Run Code Online (Sandbox Code Playgroud)

  • 或者干脆`$request->id` (7认同)