Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel在控制器中找不到IoC绑定_Php_Laravel_Laravel 4 - Fatal编程技术网

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容器知道如何使用您的绑定构建它,而不是自动构建具体类。啊,愚蠢的我,更改了绑定的名称!谢谢你抽出时间!