牛骨文教育服务平台(让学习变的简单)

基于服务容器的扩展

几乎每个 Laravel 框架引入的服务提供者都会绑定对象到服务容器中。你可以在 config/app.php 配置文件中找到应用程序的服务提供者清单。如果你有时间,你应该浏览过这里面每一个提供者的源代码。通过这样做,你将会更了解每一个提供者添加什么到框架,以及用什么键值来绑定各种服务到服务容器。

例如, HashServiceProvider 绑定 hash 做为键值到服务容器,它将解析成 IlluminateHashingBcryptHasher 实例。你可以在应用程序中覆写这个 IoC 绑定,轻松地扩展并覆写这个类。例如:

<?php namespace AppProviders;

class SnappyHashProvider extends IlluminateHashingHashServiceProvider {

    public function boot()
    {
        parent::boot();

        $this->app->bindShared("hash", function()
        {
            return new SnappyHashingScryptHasher;
        });
    }

}

要注意的是这个类扩展 HashServiceProvider,不是默认的 ServiceProvider 基础类。当你扩展了服务提供者,在 config/app.php 配置文件把 HashServiceProvider 换成你扩展的提供者名称。

这是被绑定在容器的所有核心类的一般扩展方法。实际上,每个以这种方式绑定在容器的核心类都可以被覆写。再次强调,看过每个框架引入的服务提供者将会使你熟悉:每个类被绑在容器的哪里、它们是用什么键值绑定。这是个好方法可以了解更多关于 Laravel 如何结合它们。