教程 > laravel 教程 > 阅读:48

laravel contract——迹忆客-ag捕鱼王app官网

简介

laravel的contract是一组定义框架提供的核心服务的接口。例如,illuminate\contracts\queue\queue contract 定义了排队作业所需的方法,而illuminate\contracts\mail\mailer contract 定义了发送电子邮件所需的方法。

对每个contract,框架都有提供的相应实现。例如,laravel提供了具有各种驱动程序的队列实现,以及由swiftmailer提供支持的邮件程序的实现。

所有laravel contract都存在于自己的github仓库中。


contract 与 facade

laravel的facade 和帮助功能提供了一种利用laravel服务的简单方法,而无需在方法的参数中键入类型限定,就可以从服务容器中解析contract。在大多数情况下,每个facade都有一个等效的contract。

与facade(不需要您在类的构造函数中传入facade)不同,contract允许我们为类定义显式依赖关系。一些开发人员更喜欢以这种方式显式定义其依赖项,因此他们更喜欢使用contract,而其他开发人员则享受facade的便利。

无论是喜欢facade还是contract这都没关系,大多数的应用程序都能正常运行。但是,如果要构建程序包,则应强烈考虑使用contract,因为它们在程序包上下文中更容易测试。


何时使用 contract

如在其他地方讨论的那样,使用contract或facade的许多决定将取决于个人喜好和开发团队的喜好。contract和facade均可用于创建功能强大且经过良好测试的laravel应用程序。只要保持类的职责单一,就会发现使用contract和facade之间的实际差异很小。

但是,我们可能仍然对contract有几个疑问。例如,为什么要完全使用接口?使用接口不是更复杂吗?让我们将使用接口的原因归纳为以下两点:松散耦合和简单性。

松耦合

首先,让我们回顾一些与缓存实现紧密相关的代码:

cache = $cache;
    }
    /**
     * retrieve an order by id.
     *
     * @param  int  $id
     * @return order
     */
    public function find($id)
    {
        if ($this->cache->has($id)) {
            //
        }
    }
}

在此类中,代码与给定的缓存实现紧密耦合。之所以紧密耦合,是因为我们依赖于软件包 provider 提供的具体cache类。如果该包的api更改,我们的代码也必须更改。

同样,如果我们要用另一种技术(redis)替换我们的基础缓存技术(memcached),则我们将不得不再次修改代码。我们的repository不应该过多的关系是谁提供数据或他们是如何提供数据的。

要替换这种方法,我们可以依靠简单的,与实现无关的接口来改进代码:

cache = $cache;
    }
}

现在,该代码尚未耦合到任何特定的实现,由于contract包不包含任何实现且没有依赖关系,因此我们可以轻松地编写任何给定contract的替代实现,从而使我们可以替换缓存的实现,而无需修改任何调用缓存的代码。


如何使用 contract

那么,如何获得contract的实现?实际上很简单。

laravel中的许多类型的类都可以通过服务容器来解析,包括控制器,事件监听器,中间件,排队的作业,甚至路由闭包。因此,要获取contract的实现,我们只需在要解析的类的构造函数中输入该接口的“类型提示”即可。

例如:

redis = $redis;
    }
    /**
     * handle the event.
     *
     * @param  orderwasplaced  $event
     * @return void
     */
    public function handle(orderwasplaced $event)
    {
        //
    }
}

解析事件监听器后,服务容器将读取类的构造函数上的类型提示,并注入适当的值。要了解有关在服务容器中注册内容的更多信息,请查阅服务容器文档


contract 参考

下表提供了所有laravel contract 及其等效facade的参考:

contract references facade
illuminate\contracts\auth\access\authorizable
illuminate\contracts\auth\access\gate gate
illuminate\contracts\auth\authenticatable
illuminate\contracts\auth\canresetpassword
illuminate\contracts\auth\factory auth
illuminate\contracts\auth\guard auth::guard()
illuminate\contracts\auth\passwordbroker password::broker()
illuminate\contracts\auth\passwordbrokerfactory password
illuminate\contracts\auth\statefulguard
illuminate\contracts\auth\supportsbasicauth
illuminate\contracts\auth\userprovider
illuminate\contracts\bus\dispatcher bus
illuminate\contracts\bus\queueingdispatcher bus::dispatchtoqueue()
illuminate\contracts\broadcasting\factory broadcast
illuminate\contracts\broadcasting\broadcaster broadcast::connection()
illuminate\contracts\broadcasting\shouldbroadcast
illuminate\contracts\broadcasting\shouldbroadcastnow
illuminate\contracts\cache\factory cache
illuminate\contracts\cache\lock
illuminate\contracts\cache\lockprovider
illuminate\contracts\cache\repository cache::driver()
illuminate\contracts\cache\store
illuminate\contracts\config\repository config
illuminate\contracts\console\application
illuminate\contracts\console\kernel artisan
illuminate\contracts\container\container app
illuminate\contracts\cookie\factory cookie
illuminate\contracts\cookie\queueingfactory cookie::queue()
illuminate\contracts\database\modelidentifier
illuminate\contracts\debug\exceptionhandler
illuminate\contracts\encryption\encrypter crypt
illuminate\contracts\events\dispatcher event
illuminate\contracts\filesystem\cloud storage::cloud()
illuminate\contracts\filesystem\factory storage
illuminate\contracts\filesystem\filesystem storage::disk()
illuminate\contracts\foundation\application app
illuminate\contracts\hashing\hasher hash
illuminate\contracts\http\kernel
illuminate\contracts\mail\mailqueue mail::queue()
illuminate\contracts\mail\mailable
illuminate\contracts\mail\mailer mail
illuminate\contracts\notifications\dispatcher notification
illuminate\contracts\notifications\factory notification
illuminate\contracts\pagination\lengthawarepaginator
illuminate\contracts\pagination\paginator
illuminate\contracts\pipeline\hub
illuminate\contracts\pipeline\pipeline
illuminate\contracts\queue\entityresolver
illuminate\contracts\queue\factory queue
illuminate\contracts\queue\job
illuminate\contracts\queue\monitor queue
illuminate\contracts\queue\queue queue::connection()
illuminate\contracts\queue\queueablecollection
illuminate\contracts\queue\queueableentity
illuminate\contracts\queue\shouldqueue
illuminate\contracts\redis\factory redis
illuminate\contracts\routing\bindingregistrar route
illuminate\contracts\routing\registrar route
illuminate\contracts\routing\responsefactory response
illuminate\contracts\routing\urlgenerator url
illuminate\contracts\routing\urlroutable
illuminate\contracts\session\session session::driver()
illuminate\contracts\support\arrayable
illuminate\contracts\support\htmlable
illuminate\contracts\support\jsonable
illuminate\contracts\support\messagebag
illuminate\contracts\support\messageprovider
illuminate\contracts\support\renderable
illuminate\contracts\support\responsable
illuminate\contracts\translation\loader
illuminate\contracts\translation\translator lang
illuminate\contracts\validation\factory validator
illuminate\contracts\validation\implicitrule
illuminate\contracts\validation\rule
illuminate\contracts\validation\validateswhenresolved
illuminate\contracts\validation\validator validator::make()
illuminate\contracts\view\engine
illuminate\contracts\view\factory view
illuminate\contracts\view\view view::make()

查看笔记

扫码一下
查看教程更方便
网站地图