laravel重要概念和知识点
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重要概念和知识点的更多相关文章
- Android开发涉及有点概念&相关知识点(待写)
前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...
- IOS开发涉及有点概念&相关知识点
前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...
- Laravel 核心概念
工欲善其事,必先利其器.在开发Xblog的过程中,稍微领悟了一点Laravel的思想.确实如此,这篇文章读完你可能并不能从无到有写出一个博客,但知道Laravel的核心概念之后,当你再次写起Larav ...
- 小白也能看懂的 Laravel 核心概念讲解
自动依赖注入 什么是依赖注入,用大白话将通过类型提示的方式向函数传递参数. 实例 1 首先,定义一个类: /routes/web.php class Bar {} 假如我们在其他地方要使用到 Bar ...
- Java中继承,类的高级概念的知识点
1. 继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2. 继承的优点 A.代码的可重用性 B.子类可以扩 ...
- 第二章--Win32程序运行原理 (部分概念及代码讲解)
学习<Windows程序设计>记录 概念贴士: 1. 每个进程都有赋予它自己的私有地址空间.当进程内的线程运行时,该线程仅仅能够访问属于它的进程的内存,而属于其他进程的内存被屏蔽了起来,不 ...
- Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序
Android For JNI(一)--JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序 当你的Android之旅一步步的深入的时候,你其实会发现,很多东西都必须去和framew ...
- laravel学习资料
http://blog.csdn.net/qq_20873039/article/category/6246852 --laravel核心概念 /Eloquent ORM / laravel bl ...
- kubernetes 基本概念和资源对象汇总
kubernetes 基本概念和知识点脑图 基本概念 kubernetes 中的绝大部分概念都抽象成kubernets管理的资源对象,主要有以下类别: Master : Master节点是kubern ...
随机推荐
- linux yum 命令 详解
linux yum命令详解 yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能 ...
- samsung-smart app 开发
http://www.samsungdforum.com/ http://seller.samsungapps.com/login/signIn.as?returnURL=%2fmain%2fsell ...
- Sqli-labs less 35
Less-35 35关和33关是大致的一样的,唯一的区别在于sql语句的不同. $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; ...
- String、StringBuilder
public class testString{ public static void main(String[] args) { String a="cool"; String ...
- zend studio插件
1.安装使用Aptana插件(html,css,js代码提示功能) 安装步骤: 1).zend studio->Help->Install New Software->work wi ...
- Python中编码问题?
一.键盘输入 raw_input('请输入:'.decode('utf-8').encode('gbk'))raw_input(unicode('请输入:','utf-8').encode('gbk' ...
- POJ 2092
#include <iostream> #include <algorithm> #define MAXN 10005 using namespace std; int _m[ ...
- PATH环境变量和CLASSPATH环境变量详解
大凡装过JDK的人都知道要安装完成后要设置环境变量,可是为什么要设置环境变量呢?环境变量有什么作用? 1)PATH详解: 计算机安装JDK之后,输入“javac”“java”之类的命令是不能马上被计算 ...
- 使用时间戳引入css、js文件
前言 最近在一家创业公司实习,主要负责新版官网和商家平台管理系统的前端开发和维护,每次测试都要上传文件到ftp服务器端测试,初期由于更新修改比较频繁,每次都是直接上传覆盖css.js.php文件,链接 ...
- windows JDK 版本切换
windows JDK 版本切换1. HKEY_LOCAL_MACHINE“SOFTWARE“JavaSoft“Java Runtime Environment“CurrentVersion, 把这个 ...