Php Laravel在控制器中找不到IoC绑定
我有一个自定义类Php Laravel在控制器中找不到IoC绑定,php,laravel,laravel-4,Php,Laravel,Laravel 4,我有一个自定义类App/Http/Responder,它有一些方法可以在我的应用程序中构建特定的JSON响应。我想单独测试我的控制器,所以我试图通过构造函数注入依赖项 我的计划是简单地创建一个服务提供商,将其绑定到$app上,然后根据文档,让它自动解决: public function register() { $this->app->bind('responder', function() { return new App\Http\Responde
App/Http/Responder
,它有一些方法可以在我的应用程序中构建特定的JSON响应。我想单独测试我的控制器,所以我试图通过构造函数注入依赖项
我的计划是简单地创建一个服务提供商,将其绑定到$app
上,然后根据文档,让它自动解决:
public function register()
{
$this->app->bind('responder', function()
{
return new App\Http\Responder($this->app['cache'], $this->app['app'], new JsonResponse, $this->app['config']);
});
}
然后将其添加到我的config/app.php
好的,现在我的响应程序及其依赖项被绑定到应用程序,如Responder
现在我想我可以将响应程序注入我的控制器构造函数,而Laravel可以从IoC容器中自动解决这个问题:
class AreasController extends BaseController {
protected $responder;
public function __construct(Responder $responder)
{
$this->responder = $responder;
}
但是我得到的类响应器不存在
在不使用App::make()
Facade的情况下,使其工作的唯一方法是将应用程序注入我的控制器:
use Illuminate\Foundation\Application as App;
class AreasController extends BaseController {
protected $app;
public function __construct(App $app)
{
$this->app = $app;
}
然后我可以执行$this->app['responder']->method()
显然我遗漏了一些东西,但我想避免在我的应用程序中使用Facades,这样我就可以进行测试。如果您想在IOC容器中键入要解析的提示类,您应该将实际类名与命名空间绑定:
$this->app->bind('App\Http\Responder', function()
{
return new App\Http\Responder($this->app['cache'], $this->app['app'], new JsonResponse, $this->app['config']);
});
从技术上讲,容器仍然会解析这个类,因为它是一个可以找到的具体类,但是您所做的方式允许注入其他绑定IOC的资源,这是一个很好的实践
然后,当您希望为自己注入此类时,按通常的方式键入该类的完整路径:
use App\Http\Responder;
class AreasController extends BaseController {
protected $responder;
public function __construct(Responder $responder)
{
$this->responder = $responder;
}
}
另外,值得一提的是,您的错误表明您将“Responder”拼错为“Responder”。如果您想在IOC容器中键入要解析的提示类,则应将实际类名与命名空间绑定:
$this->app->bind('App\Http\Responder', function()
{
return new App\Http\Responder($this->app['cache'], $this->app['app'], new JsonResponse, $this->app['config']);
});
从技术上讲,容器仍然会解析这个类,因为它是一个可以找到的具体类,但是您所做的方式允许注入其他绑定IOC的资源,这是一个很好的实践
然后,当您希望为自己注入此类时,按通常的方式键入该类的完整路径:
use App\Http\Responder;
class AreasController extends BaseController {
protected $responder;
public function __construct(Responder $responder)
{
$this->responder = $responder;
}
}
另外,值得一提的是,您的错误表明您将“Responder”拼错为“Responder”。谢谢。。。那么现在在我的响应器
类构造函数中,我是否应该只执行构造($cache,$app,$response,$config)
,因为它似乎在类app\Http\Responder
中抛出无法解决的依赖项解析[Parameter#0[$cache]]。。。困惑的请确保您正在注册服务提供商,以便IoC容器知道如何使用您的绑定构建它,而不是自动构建具体类。啊,愚蠢的我,更改了绑定的名称!谢谢你抽出时间!谢谢那么现在在我的响应器
类构造函数中,我是否应该只执行构造($cache,$app,$response,$config)
,因为它似乎在类app\Http\Responder
中抛出无法解决的依赖项解析[Parameter#0[$cache]]。。。困惑的请确保您正在注册服务提供商,以便IoC容器知道如何使用您的绑定构建它,而不是自动构建具体类。啊,愚蠢的我,更改了绑定的名称!谢谢你抽出时间!