Laravel可配置的类有多个选项

时间:2018-01-29 16:55:32

标签: php laravel class

我一直在使用laravel大约一年,而且我很乐意将它用于我每天做的各种任务。

最近正致力于在工作中制作一个内部使用的小型邮件服务,我喜欢如何在配置中指定哪个提供程序与.env文件一起使用,它似乎根据我在.env中提供的设置进行切换

让我提出疑问,虽然这是如何实现的,所以我可以在玩它时做类似的事情。我很乐意帮助使用我已经加入作曲家的自定义库,但是说我想上升一级(就我的技能而言)并且做了一个像电子邮件这样的常规任务,并制作了一些具有以下功能的课程:执行任务但在后台使用某人在配置文件中指定的内容并使用其选择的库函数,同时仍然看起来像一个可重用的函数。

抱歉解释得很糟糕,我的意思是,如果您使用Mail :: send(),它会通过.env中的提供商发送电子邮件

这是我的意思的一个不好的例子。

Foo::BasicMethod() --> the alias foo(the name for the everyday task) using its method.

BasicMethod()是一个普通的方法调用,同时在后台我已经加载了3个作曲家库。

 1. FooLibrary
 2. CoolFoo
 3. 2FOO4U

我曾在配置文件中设置它在调用BasicMethod()时使用该库方法。

1 个答案:

答案 0 :(得分:0)

首先要熟悉对服务提供商,外墙和合同的充分理解。

https://laravel.com/docs/5.5/providers

https://laravel.com/docs/5.5/facades

https://laravel.com/docs/5.5/contracts

您希望为3个库中的每个库创建类,并让它们实现通用契约(接口)。这是您在库之间切换并使用配置中设置的方式。

考虑一个定义了以下方法的接口:

public function sendMail($to, $from, $message);

public function attachDocument($attachment);

通过让每个库包装类实现这些方法,您可以通过绑定契约来注入正确的实现。

接下来,您将拥有一个服务提供程序,该服务提供程序可以自行注册并引导该类以及该框架。创建一个Facade作为访问底层类的便利机制,而不必实际公开它。