Laravel 路由参数的构造函数注入

Laravel 路由参数的构造函数注入,laravel,dependency-injection,laravel-5,laravel-5.2,Laravel,Dependency Injection,Laravel 5,Laravel 5.2,我有一个类,我把它和一个路由参数一起注入控制器。然后我使用setter在类中设置route参数 路线 Route::get('path/of/url/with/{paramVar}', 'testController@testFunc) 控制器 class testController { public function testFunc(MyClassInterface $class, $routeParamVar) { $class->setParam

我有一个类,我把它和一个路由参数一起注入控制器。然后我使用setter在类中设置route参数

路线

Route::get('path/of/url/with/{paramVar}', 'testController@testFunc)
控制器

class testController
{
    public function testFunc(MyClassInterface $class, $routeParamVar)
    {
        $class->setParam($routeParamVar);
        //do stuff here
        ...
服务提供商

public function register()
{
    $this->bind('path\to\interface', 'path\to\concrete');
}
相反,我希望将route参数注入我正在注入控制器的类的构造函数中。我知道我需要使用laravel容器

我可以使用
Request::class
注入其他路由参数,但如何注入路由路径参数

我想我最终会得到这样的结果

class testController
{
    public function testFunc(MyClassInterface $class)
    {
        //do stuff here
        ...

您可以使用
$router->input('foo')
函数在服务容器中检索路由参数

因此,在您的服务提供商中:

public function register()
{
    $this->bind('path\to\interface', function(){

        $param = $this->app->make('router')->input('foo');

        return new path\to\concrete($param);

    });
}
关于您的评论,它不会减少太多代码,但在这种情况下,最好创建第二个服务提供者,比如
FooValueServiceProvider
,实现的唯一任务是从路由器检索该参数。然后在每个绑定中,您可以解析
FooValueServiceProvider
,并从中检索值。然后,如果以后更改路由参数的名称,或者需要从路由以外的其他位置解析它,则只需更改该提供程序的实现


我不知道你是否能比每个绑定多出一行代码更高效,但至少通过这种方式,它可以被换成另一种方法。

你能举个例子吗?或者显示完整的testController代码?我已经用更多的信息更新了问题谢谢Jeff,这非常有效。当有大量绑定使用这个参数时,您对如何减少代码量有何建议?(但是返回不同的混凝土)我假设如果你走这条路,你必须手动注入其余的依赖项(因为容器将不再自动解析它们?@myol-hmm我不知道你的意思。您必须始终在服务提供商中手动使用
$app->make()
创建依赖项,但必须在其他任何位置(控制器、模型等)创建依赖项您将能够在接口中键入hint并接收使用
$param
构造的具体类。我应该已经澄清了-如果一个类有3个由容器自动解析的依赖项,那么当您显式注入第四个依赖项时,您似乎还必须显式注入其余的依赖项。这是正确的还是容器仍然可以自动解析剩余的依赖项?您能否提供一个链接或示例,说明自动解析的依赖项与手动注入的依赖项是什么意思?