本书主要讲解laravel框架底层组件的实现细节,设计模式在框架中的运用,和一个laravel应用实例
第一章 组件化开发与composer使用
组件化开发
Laravel底层就使用了很多Symfony的组件,如果对一些组件不满意可以使用其他开源组件替换,如Laravel的Illuminate Container类可以替换为Pimple的IOC容器类。
composer使用
composer的自动加载有PSR-0,PSR-4,classmap,files四种规范形式,files主要用来加载函数库,classmap会搜索目录下的所有php和inc后缀的文件生成映射,PSR-4是命名空间和目录的映射,PSR-0已渐渐被废除。
构建Laravel框架
目标:MVC框架,实现路由,控制器,数据库操作,视图模板 借助工具:Laravel的Illuminate组件
步骤:
1.项目初始化:composer.json
2.添加路由组件
3.添加控制器模块
4.添加模型组件
5.添加视图组件
第二章 Laravel安装和环境搭建(无需总结)
第三章 Laravel框架中常用的PHP语法
组件化开发语法条件
命名空间
类似文件系统的文件夹,同时是实现自动加载的一个机制(命名空间到文件夹路径的映射)
文件包含
include和require,作用几乎一样,报错级别不同,require会中止,include会继续执行。也是自动加载实现的基础。
匿名函数
匿名函数也就是closure,主要的用法有:作为callback函数, 储存作用域状态,修改传入类状态。
魔术
魔术方法
魔术方法在执行某些操作的时候触发,如在Eloquent Model里使用__get和__set 对attribute数组进行获取和添加
魔术常量
如$_SERVER 等等
反射
依赖注入和IOC容器的实现机制,获取Class信息
后期静态绑定
static和self 扩展类调用父类的时候有所区别,如Laravel中Model调用Model Abstract Class
Trait
横向继承,组合,解决PHP单继承的缺点
第四章 Laravel框架中使用的HTTP协议基础
后端工程师更多关注与复杂的业务流程和架构设计,这一章的内容是常常被忽视的知识点。
HTTP协议,应用层协议,无状态, 报文包含HTTP首部和主体数据,TCP三次握手建立连接,请求一次就关闭连接。
```数据链路层 和 网络层 各自的职责 数据包的封装格式,数据包如何从一台主机传到另一台
数据链路层 和 网络层 各自的职责
网段内通信和网段之间的通信 (地址转发表,路由控制表) 内只需要地址转发表,之间需要路由控制表,两个都需要ARP
ARP协议的职责:解析IP和MAC的映射关系
DNS 负责域名解析
HTTP request和response报文结构
状态码 1 继续 2 成功 3 重定向 4 客户端错误 5 服务端错误 ```
第五章 Laravel框架初识
Laravel框架应用程序目录结构(无需总结)
Laravel应用程序的三个重要环节
路由
再路由服务提供者启动过程中由Route-ServiceProvider.php中的map方法和require_app_path('Http/routes.php');加载。
控制器
作为HTTP请求的二次分发控制部分,与路由关系紧密,但通过服务容器以依赖注入的方式解决了这种耦合关系,使得控制器与其他类耦合度非常低。
视图
Laravel将视图作为一个独立的组件与控制器解耦,在任何位置使用view() 相当于View::make(),最终调用的是Illuminate\View\Factory\make()方法,进而创建Illuminate/View/View类的实例化对象,就可以加载视图。
Laravel框架中的设计模式
服务容器
工厂模式
IOC模式
源码解析(之后要认真看看)
请求处理管道
容器和服务提供者解决了依赖注入和资源获取的功能,因为我们可以随时获取需要的服务,实现想要的功能。而对于服务器,真正需要的处理请求并生成响应输出给客户端,这些步骤要达到松耦合,在Laravel中使用了中间件,设计者将其比喻成洋葱,分成许多的层,每层有特定的功能,可随时添加和修改层。中间件使用的是装饰者模式,但在PHP特有的编程方式下形式发送了变化。
装饰者模式
装饰者模式主要遵循了设计原则中的开闭原则,不修改源代码的情况下添加或减少功能。
装饰者实现统一的接口,并以依赖注入的形式将装饰者实例化,继承父类,重写方法决定是在父类方法前执行还是之后。
书中的实例:
小芳类实现Decorator接口的display()
服饰类同样实现接口的display(),并可依赖注入其他Decorator修饰它们,调用注入的Decorator类的display()
鞋子类继承服饰类,并重写父类方法,在父类display之前执行
裙子类继承服饰类,并重写父类方法,在父类之前执行
Fire类继承服饰类,重写父类方法,在之前和之后分别执行自己的逻辑
在这个例子中小芳类是对请求的响应,相当于控制器。而这些打扮类就相当于中间件的功能,在打扮的过程中可随时增加新的打扮类,只要该类继承Finery类并调用父类的同名方法,这就是装饰者模式的应用场景
请求处理管道
实例间的功能调用通过闭包函数完成