我是初学者,从laravel 5.2开始,我认为下面的这些概念应该比直接阅读文档更直接。
我认为一个很好的解释和例子可以真正帮助初学者理解这4个概念如何在框架中融合在一起。
答案 0 :(得分:5)
服务提供商: 所谓的服务提供商是Laravel应用程序的核心。它们是初始化过程的核心元素,其中所有相关和必需的代码都由PHP加载。这包括框架本身的所有基本要素,以及您需要加载的任何自有和自定义代码。
控制反转,或IoC: 无法轻易解释(我只有很少的想法,这不是专业人士)
外墙:
Facade模式是一种软件设计模式,通常用于面向对象的编程。事实上,Facade是一个包装复杂库的类,以便为它提供更简单,更易读的接口。 Facade模式还可用于为一组复杂且设计不良的API提供统一且设计良好的API。
Laravel facade是一个类,它为容器内的服务提供类似静态的接口。根据文档,这些外观用作访问容器服务的底层实现的代理。
<强> MORE 强>
我知道这还不够!你要问的是复杂的东西,单个答案是不够的
答案 1 :(得分:4)
好的,所以首先我同意其他人说laracasts是一个了不起的资源,它将真正进入更多细节并简单地分解。
话虽如此,简要概述如下:
服务容器(IoC容器)是一个层级核心进程,允许您优雅地加载具有依赖关系的对象。例如,如果我有这样的控制器方法:
public function update(Request $request, $id)
{
...
}
IoC容器足够智能,可以解析请求并加载与Request类关联的所有依赖项,以确保它得到正确的实例化。
它还允许您实例化类,而不必完全传递所有依赖项,如下所示:
class ProductRepo(Product $product)
{
public function get($id)
{
...
}
}
我可以引用这个类而不用依赖注入加载它,如下所示:(确保传入完整的命名空间)
app('App\ProductRepo')->get($id);
这使得我不必传入产品对象,Laravel足够聪明地解析Product对象,因为IoC容器在幕后扮演魔术。
服务提供商是您在启动或实例化类时自定义行为的地方。例如,Laravel默认使用一个名为EventServiceProvider的类。这个类的工作是在Laravel中配置Event系统,以确保包含您创建的所有自定义事件侦听器。因此,如果我想确保在加载EventDispatcher时,它会引入所有必需的依赖项。
合同非常简单。它们只是对面向php面向对象概念的暗示。这个概念表明有些类可以建立规则。例如:
interface SearchableInterface
{
public function search($data);
}
class BinarySearch implements SearchableInterface
{
public function search($data)
{
...
}
}
这表明任何实现SearchableInterface的类必须具有接受一个参数的函数搜索。这会创建一个“契约”,任何实现SearchableInterface的类都必须具有此函数,否则应用程序将抛出错误。
这非常适合使用可互换的部分(兄弟姐妹)而不必担心课程缺少您需要的功能。
最后但并非最不重要的是 Facade 。我喜欢外墙。简而言之,所有这一切都是创建一个静态表示的类,而不是静态定义的。所以假设我有一个可以从S3获取文档的类。
class S3
{
public function get($file)
{
...
}
}
如果没有外观,你首先必须实例化然后调用get来获取S3中的内容。
$s3 = new S3;
$s3->get('myAwesomeFile');
Laravel允许您轻松注册Facades,以便您可以静态使用它以提高可读性和便利性。
S3::get('MyAwesomeFile');
所有这些都是对每个概念的过度简化,但详细介绍了每个概念的一些基础知识。希望这有帮助!