如何在Laravel中实现依赖于类和方法的服务绑定?
解决Laravel中针对特定控制器方法的服务绑定问题
我来帮你搞定这个Laravel容器绑定的问题!你之前的代码差了关键的一步——精准指定要匹配的控制器方法,这才导致绑定没达到预期效果。
正确的绑定代码
把这段代码放到App\Providers\AppServiceProvider的register方法里:
public function register() { $this->app->when(UserController::class) ->needs(SomeClass::class) ->whenMethod('getIndex') // 新增这行,限定绑定仅作用于该方法 ->give(function () { return new SomeClass(4434); }); }
为什么原代码没生效?
你之前的绑定是针对整个UserController类的,理论上如果这个类只有getIndex方法依赖SomeClass也能工作,但大概率是遇到了这两个问题:
- 绑定代码没放在服务提供者的
register方法中(Laravel只会加载这里的容器绑定) - Laravel的容器缓存导致旧配置未更新
额外注意事项
- 先清除Laravel缓存确保新绑定生效,执行这两个命令:
php artisan config:clear php artisan cache:clear - 如果后续要给
UserController的其他方法绑定不同参数的SomeClass实例,只需要复制这段代码,修改whenMethod的方法名和闭包里的参数值即可。
现在再访问UserController@getIndex,应该就能得到预期的返回值Lorem ipsum 4434啦!
内容的提问来源于stack exchange,提问作者Adam Kozlowski
相关产品推荐
相关产品推荐

