Laravel - 核心概念 - 门面(Facade)和服务提供者(Provider)的应用示例

程序员日记      2019-08-29
要提供的服务Service实例app/Services/ZCurl.php<?phpnamespaceApp\Services;classZCurl{/***同过GET方式获取页面内容*@paramstring$url*@paramarray$header*@returnmixed*/publicstaticfunctiondoGet($url,$header=[]){//初始化$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$url);//执行后不...
标签:
93 人看过

Laravel - 核心概念 - 契约(Contracts)

程序员日记      2019-08-29
定义Contract,翻译过来叫契约、协议等。在Laravel-china的翻译中,是一个不翻词,这里也使用Contract来代替。Contract就是接口Interface,用来规范某些服务的功能结构的,在Laravel中称之为契约。以缓存操作为例,我们直接使用Cache::get()和Cache::put()即可完成缓存的获取和设置,语法很简单。此时问题来了:缓存的实现有很多种,例如文件缓存,Memcache缓存,Redis缓存等,要保证任何一种缓存的操作都具备get和put方法,如何保证?...
标签:
84 人看过

Laravel - 核心概念 - 门面(Facades)

程序员日记      2019-08-29
定义门面为应用服务容器中的绑定类提供了一个「静态」接口。Laravel内置了很多门面,你可能在不知道的情况下正在使用它们。Laravel的门面作为服务容器中底层类的「静态代理」,相比于传统静态方法,在维护时能够提供更加易于测试、更加灵活、简明优雅的语法。Laravel的所有门面都定义在Illuminate\Support\Facades命名空间下,所以我们可以轻松访问到门面示例useIlluminate\Support\Facades\Cache;Route::get('/cache',func...
标签:
127 人看过

Laravel - 核心概念 - 服务提供者(Provider)

程序员日记      2019-08-28
定义服务提供者是Laravel应用启动的中心,你自己的应用以及所有Laravel的核心服务都是通过服务提供者启动。但是,我们所谓的「启动」指的是什么?通常,这意味着注册服务,包括注册服务容器绑定、事件监听器、中间件甚至路由。服务提供者是应用配置的中心。如果你打开Laravel自带的config/app.php文件,将会看到一个providers数组,这里就是应用所要加载的所有服务提供者类,当然,其中很多是延迟加载的,也就是说不是每次请求都会被加载,只有真的用到它们的时候才会加载。编写服务提供者所...
标签:
85 人看过

Laravel - 核心概念 - 服务容器(IoC) - 服务解析

程序员日记      2019-08-28
1.make解析有很多方式可以从容器中解析对象,首先,你可以使用make方法,该方法接收你想要解析的类名或接口名作为参数:$fooBar=$this->app->make('HelpSpot\API');如果你所在的代码位置访问不了$app变量,可以使用辅助函数resolve:$api=resolve('HelpSpot\API');2.自动注入namespaceApp\Http\Controllers;useApp\Users\RepositoryasUserRepository;...
标签:
92 人看过

Laravel - 核心概念 - 服务容器(IoC) - 服务别名

程序员日记      2019-08-28
1.什么是服务别名在说服务容器的解析之前,需要先说说服务的别名。什么是服务别名呢?不同于上一个博客中提到的Facade门面的别名(在config/app中定义),这里的别名服务绑定名称的别名。通过服务绑定的别名,在解析服务的时候,跟不使用别名的效果一致。别名的作用也是为了同时支持全类型的服务绑定名称以及简短的服务绑定名称考虑的。通俗的讲,假如我们想要创建auth服务,我们既可以这样写:$this->app->make('auth')又可以写成:$this->app->ma...
标签:
92 人看过

Laravel - 核心概念 - 服务容器(IoC) - 绑定

程序员日记      2019-08-28
绑定所谓的绑定就是将接口与实现建立对应关系。几乎所有的服务容器绑定都是在服务提供者中完成,也就是在服务提供者中绑定。如果一个类没有基于任何接口那么就没有必要将其绑定到容器。容器并不需要被告知如何构建对象,因为它会使用PHP的反射服务自动解析出具体的对象。也就是说,如果需要依赖注入的外部资源如果没有接口,那么就不需要绑定,直接利用服务容器进行解析就可以了,服务容器会根据类名利用反射对其进行自动构造。1.bind绑定绑定有多种方法,首先最常用的是bind函数的绑定。1).绑定自身$this->...
标签:
104 人看过

Laravel - 核心概念 - 服务容器(IoC)- 模式详解

程序员日记      2019-08-28
定义容器,字面上理解就是装东西的东西。常见的变量、对象属性等都可以算是容器。一个容器能够装什么,全部取决于你对该容器的定义。当然,有这样一种容器,它存放的不是文本、数值,而是对象、对象的描述(类、接口)或者是提供对象的回调,通过这种容器,我们得以实现许多高级的功能,其中最常提到的,就是“解耦”、“依赖注入(DI)”。IoC(控制反转)容器(服务容器)Laravel的核心就是一个IoC容器,根据文档,称其为“服务容器”,顾名思义,该容器提供了整个框架中需要的一系列服务。作为初学者,很多人会在这一个...
标签:
88 人看过

Laravel - 核心概念 - 一次WEB请求的生命周期

程序员日记      2019-08-28
概览WEB请求->访问入口文件->获取应用实例->发送请求到HTTP/Console内核->载入服务提供者->分发请求到路由或者控制器说明1.访问入口文件Laravel应用的所有请求入口都是public/index.php文件,所有请求都会被web服务器(Apache/Nginx)导向这个文件。index.php文件包含的代码并不多,但是,这里是加载框架其它部分的起点。2.获取应用实例index.php文件载入Composer生成的自动加载设置,然后从bootstr...
标签:
80 人看过

Laravel - 安装配置 - 目录结构详细说明

程序员日记      2019-08-28
models目录说明Laravel没有提供models目录,因为models这个词对不同人而言有不同的含义,容易造成歧义,有些开发者认为应用的模型指的是业务逻辑,另外一些人则认为模型指的是与关联数据库的交互。正是因为这个原因,我们默认将Eloquent的模型直接放置到app目录下,开发者可以自行选择放置的位置。对于国内开发者,尤其是PHP开发者来说,models目录用于存放与数据库交互的模型类应该没有什么异议,而业务逻辑应该放到services这种目录之下。所以推荐大家在生成模型类的时候指定生成...
标签:
93 人看过