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