Service Provider:

一个laravel service provider就是一个注册IoC container binding的类。实际上,laravel本身就自包含了一堆管理核心框架组件的container binding的service provider. 一个service provider必须具有至少一个方法: register. 该方法就是执行该service provider绑定其暴露给laravel ioc container的类库的函数。当一个请求进入到application,而框架本身booting up时,那么所有在app.php中定义的service provider的register函数将被调用。这个过程在applicaiton的life cycle很早就发生了,因此当你bootup你自己的文件时,这些laravel service就已经可用了,比如所有在start目录中定义的自己的代码。

注意:永远不要在register方法中使用laravel的services,因为这个函数只用来绑定objects到ioc container.所有解析和调用相关bounded class的工作必须在service provider的boot函数中调用。(在所有的service providers被成功注册后,这些组件就进入booted状态,这时将会调用每个service provider的boot函数。通常boot函数可以做任何你想做的事情,比如register event listener,包含一个route file,register filter等等)

注意:并不是所有第三方的pacakges都需要一个service provider.事实上,甚至不需要service provider来保证第三方组件正常工作,原因是service provider本身只完成bootstrap component的功能(注册给ioc container)。不过service provider确实提供了一个组织第三方component的bootstrap代码及binding ioc的一个方便的地方,值得使用!

为了提高laravel的性能,laravel本身提供了deferred service provider的概念。比如QueueServiceProvider只有在确实需要queue时才初始化,而在一般的request中并不需要。这个机制通过如下方法实现: app/storage/meta目录保存了所谓service manifest列表,该列表列出所有的ioc binding name和其serivce provider对应关系。这样,当application请求container要求queue container binding时,laravel就知道它需要初始化queue对象,因此执行QueueServiceProvider来实例化。这样就允许了laravel实现lazy-load service provider for each request,大大提高了性能。

separate concerns

一个好的设计可能有一下就能实现:separating responsibilities, creating layers of responsibility.  controllers are responsible for receiving an HTTP request and calling the proper business layer classes.你的business/domain layer才是你的应用。她包含retrieve data, validate data, process payments, send e-mail andother functionality。

事实上,你的domain layer根本无需知道“the web”! The web is simply a transport mechanism to access your application, and knowledge of the web and HTTP need not go beyond the routing and controller layers.

Classname::class解释

namespace MyProject;
class Alpha{ } namespace MyOtherProject;
class Beta{ } echo Alpha::class; // displays: MyProject\Alpha
echo Beta::class; // displays: MyOtherProject\Beta

自从PHP5.5,class关键字也被用来作为class name resolution.你可以通过使用ClassName::class来获取一个包含fully qualified name.这个功能对于namespaced class非常有用!!

laravel重要概念和知识点的更多相关文章

  1. Android开发涉及有点概念&相关知识点(待写)

    前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...

  2. IOS开发涉及有点概念&相关知识点

    前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...

  3. Laravel 核心概念

    工欲善其事,必先利其器.在开发Xblog的过程中,稍微领悟了一点Laravel的思想.确实如此,这篇文章读完你可能并不能从无到有写出一个博客,但知道Laravel的核心概念之后,当你再次写起Larav ...

  4. 小白也能看懂的 Laravel 核心概念讲解

    自动依赖注入 什么是依赖注入,用大白话将通过类型提示的方式向函数传递参数. 实例 1 首先,定义一个类: /routes/web.php class Bar {} 假如我们在其他地方要使用到 Bar  ...

  5. Java中继承,类的高级概念的知识点

    1. 继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2. 继承的优点 A.代码的可重用性 B.子类可以扩 ...

  6. 第二章--Win32程序运行原理 (部分概念及代码讲解)

    学习<Windows程序设计>记录 概念贴士: 1. 每个进程都有赋予它自己的私有地址空间.当进程内的线程运行时,该线程仅仅能够访问属于它的进程的内存,而属于其他进程的内存被屏蔽了起来,不 ...

  7. Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序

    Android For JNI(一)--JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序 当你的Android之旅一步步的深入的时候,你其实会发现,很多东西都必须去和framew ...

  8. laravel学习资料

    http://blog.csdn.net/qq_20873039/article/category/6246852   --laravel核心概念 /Eloquent ORM / laravel bl ...

  9. kubernetes 基本概念和资源对象汇总

    kubernetes 基本概念和知识点脑图 基本概念 kubernetes 中的绝大部分概念都抽象成kubernets管理的资源对象,主要有以下类别: Master : Master节点是kubern ...

随机推荐

  1. Mozilla推荐的CSS属性书写顺序及命名规则

    传说中的Mozilla推荐 /* mozilla.org Base Styles * maintained by fantasai */ /* Suggested order: * display * ...

  2. 编写单例的 dojo class

    define([ "dojo/_base/declare" ],function( declare ){ var TimeChartService = declare(" ...

  3. 用dedecms自定义表单创建简易自助预约系统

    建站往往需要根据客户的需求来增加相应的功能,比如预约.平时用比较多的是织梦系统,那么如何用dedecms自定义表单创建简易自助预约系统呢? 进入dedecms后台,左侧菜单中依次点击“核心” - 频道 ...

  4. Ogre1.8.1 Basic Tutorial 6 - The Ogre Startup Sequence

    原文地址:http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Basic+Tutorial+6&structure=Tutorials 1. ...

  5. Win7无法使用VPN的原因与解决方法(一)

    如果Windows 7不是通过正常安装途径的话,像Ghost错误.系统环境改变等,都有可能导致无法使用VPN,而且由于原因不同,给出的提示也不尽相同.实际上,万变不离其宗, VPN是要依靠Window ...

  6. photoshop基础

    在Photoshop中,对图像的某个部分进行色彩调整,就必须有一个指定的过程.这个指定的过程称为选取.选取后形成选区. 现在先明确两个概念: 选区是封闭的区域,可以是任何形状,但一定是封闭的.不存在开 ...

  7. POJ 1787 Charlie's Change (完全背包/多重背包,输出方案的物品个数)

    网上说是多重背包,因为要输出方案,还要记录下路径,百度一下题解就可以. 自己做的时候,还没了解过多重背包,该题直接往完全背包思考了.咖啡的钱看作总的背包容量,1.5.10.25分别代表四种物品的重量, ...

  8. ios滤镜

    现在很多滤镜效果都写好了,搬运工的我直接拿来用(感谢

  9. Flatty Shadow在线为Icon图标生成长阴影效果。

    Flatty Shadow在线为Icon图标生成长阴影效果. Flatty Shadow 彩蛋爆料直击现场 Flatty Shadow在线为Icon图标生成长阴影效果.

  10. redis rdb

    http://blog.chinaunix.net/uid-1757778-id-3977331.html