为什么我的laravel绑定接口实现需要更新作曲家,否则,它不起作用?

时间:2017-06-21 02:38:31

标签: laravel

当我测试laravel绑定接口到实现时。我收到了一个错误。 我认为这与autoload有关。你能告诉我为什么吗?告诉我更多细节。 以下是我的步骤: 我做了一个界面:

namespace App\Contracts;

interface EventPusherInterface
{
    public function showSelf();
}

并实施它

namespace App\Services;

use App\Contracts\EventPusherInterface;

class RedisEventPusher implements EventPusherInterface
{
    public function showSelf()
    {
        return 'test contact';
    }
}

在AppServiceProvider中注册

$this->app->bind(
    EventPusherInterface::class,
    RedisEventPusher::class
);

在Controller中询问

namespace App\Http\Controllers;

use App\Contracts\EventPusherInterface;
use App\Contracts\InterFaceTestSecond;
use Illuminate\Http\Request;

class TestContactController extends Controller
{
    /**
     * @var InterFaceTestSecond
     */
    protected $eventPusher;

    /**
     * TestContactController constructor.
     * @param InterFaceTestSecond $eventPusher
     */
    public function __construct(
        InterFaceTestSecond $eventPusher
    ) {
        $this->eventPusher = $eventPusher;
    }

    public function show()
    {
        dd($this->eventPusher->showSelf());
    }
}

然后我收到了错误

enter image description here

然后我命令composer update 它奏效了。 我只是想知道为什么???

1 个答案:

答案 0 :(得分:0)

这是因为Laravel如何引导应用程序。

如果您查看/vendor/autoload_clasmap.php,您会发现所有类都已映射到那里。这使得它们可以通过服务容器解析为依赖关系。

并非所有文件都要求重建自动加载器,因为它们不是通过服务容器解析的。在您的情况下,您的接口和继承模式必须通过服务容器解析,因此依赖于autoload_classmap来包含这些类的定义。

希望这可以解决问题。