需要了解Laravel核心功能

时间:2016-05-05 01:26:26

标签: laravel laravel-5 laravel-5.2

我是初学者,从laravel 5.2开始,我认为下面的这些概念应该比直接阅读文档更直接。

  • 服务提供商
  • 服务容器
  • 合同
  • 外墙

我认为一个很好的解释和例子可以真正帮助初学者理解这4个概念如何在框架中融合在一起。

2 个答案:

答案 0 :(得分:5)

服务提供商: 所谓的服务提供商是Laravel应用程序的核心。它们是初始化过程的核心元素,其中所有相关和必需的代码都由PHP加载。这包括框架本身的所有基本要素,以及您需要加载的任何自有和自定义代码。

控制反转,或IoC: 无法轻易解释(我只有很少的想法,这不是专业人士)

外墙:

Facade模式是一种软件设计模式,通常用于面向对象的编程。事实上,Facade是一个包装复杂库的类,以便为它提供更简单,更易读的接口。 Facade模式还可用于为一组复杂且设计不良的API提供统一且设计良好的API。

enter image description here Laravel facade是一个类,它为容器内的服务提供类似静态的接口。根据文档,这些外观用作访问容器服务的底层实现的代理。

<强> MORE

合同: LARACASTS FREE VIDEO

我知道这还不够!你要问的是复杂的东西,单个答案是不够的

答案 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');

所有这些都是对每个概念的过度简化,但详细介绍了每个概念的一些基础知识。希望这有帮助!