美文网首页码农庄园
laravel入门到入坑一文就可以了

laravel入门到入坑一文就可以了

作者: 小马过河R | 来源:发表于2020-08-18 12:08 被阅读0次

Laravel 作为PHP最为激进的框架之一,几乎已经成为了PHP开发学习的标杆。Laravel 的底层使用了很多设计模式,比如单例、工厂、建造者、门面、策略、提供者、代理等模式。小马在使用了laravel之后,系统地整理了一下入门知识,在此分享。一文基本涵盖aravel所有的特性,浓缩总结,一文可入门。

一、目录结构

app 业务核心代码 ,自己写的代码主要写在http目录下的controllers目录,当然controllers也可以再分目录

bootstrap    是框架文件

database      数据库迁移和填充文件(注意这里的迁移指的是表结构的变更维护)

public    框架入口和公共资源文件

resources    views视图文件

storage  编译后的文件或缓存等文件的保存

vendor    composer下载的依赖模块

二、执行流程/生命周期

public/index.php文件载入通过Composer生产的自动加载配置autoload.php  ,vendor/autoload.php(加载第三方模块) ,然后从bootstrap/app.php获取并返回应用实例app,创建服务容器(所有服务提供者被注册),Request将会被交给路由器进行分发,路由器将会分发请求到路由或控制器,同时运行所有路由指定的中间件。

请求被发送到HTTP内核或Console内核,取决于应用请求类型。这两个内核为所有请求必须经过的中央处理器。

App\Http\Kernel的HTTP内核:

HTTP内核 继承自Illuminate\Foundation\Http\Kernel类,该类定义了一个bootstrappers数组,该数组中的类在请求被执行前运行,bootstrappers配置了错误处理、日志、检测应用环境、其他在请求被处理前需要处理的任务

HTTP内核还定义请求处理前需要经过HTTP中间件,该中间件处理HTTP会话的读写、判断应用是否处于维护模式,验证CSRF令牌(防止CSRF攻击)等。HTTP内核标签方法handle:获取一个Request,返回一个Response,输入HTTP请求,返回HTTP响应。

三、服务提供者

内核启动会为应用载入服务提供者,服务提供者都被配置在config/app.php配置文件的providers数组中。服务提供者被注册后,boot方法被调用。默认存放在app/Providers目录下。app服务提供者有注册函数,负责将一些自定义的类实例(如领域数据模型)等bind注册进容器(注册树模式),等待调用。服务提供者负责启动框架的所有组件,如数据库、队列、验证器、路由组件等。因他们启动并配置框架提供的所有特性,服务提供者是整个Laravel启动过程中最重要部分。「延迟」提供器:即providers数组中较多服务都是提供的实际服务需要才会加载。服务提供是启动Laravel关键部分:应用实例被创建,服务提供被注册,请求被启动后的应用进行处理。

四、路由

可以理解为URL与程序之间的映射,前面是URL路径形式后面是实际程序地址。路由中的正则表达式是匹配理由用的不是传参校验用的,意思是符合路由正则的URL才转发。

as路由别名的好处:可以用函数return route(‘别名’);生成别名对应的路由URL。

路由群组:可以理解为是给理由加一个前缀。

路由与控制器方法绑定:

五、视图

Return view(‘aa/xx’,[]);  aa/xx是模板名称,[]是传参到页面。

六、模型

在APP下直接写class文件继承model即可,调用的话直接在控制器直接实例化调用即可。


七、数据库操作

1、数据库操作之 DB  facade(原始查找)

连接DB:在database.php配置连接(配置对应的连接文件.env 文件,在这里改连接账号信息)。

DB  facade实现CURD:

2、数据库操作之查询构造器

3、数据库操作之Eloquent  ORM

每个表对应一个模型。可以简单理解为ORM。

模型定义文件:

控制器中调用ORM:

八、blade模板引擎

定义父级模板(类似OOP中的父类):

子模版(类似子类)继承这个父级模板布局文件,可以重写父级模板中定义的模块(类似于子类方法重写):

控制器中调用子模板(继承了父模板整个布局内容输出):

九、数据迁移

这里的数据迁移指的是数据库表结构的维护,可以像git管理项目代码一样管理数据库表结构版本协作,支持回滚。

数据库迁移语法文档:up和down代码是相反的操作。

迁移步骤:migration命令创建迁移文件,写入迁移操作代码(表结构变更代码)。PHP命令执行php artisan migrate即可同步所有未同步的表结构。

十、队列使用

十一、中间件

最好将中间件想象为一系列HTTP 请求必须经过才能触发你应用的「层」。每一层都会检查请求(是否符合某些条件),(如果不符合)甚至可以(在请求访问你的应用之前)完全拒绝掉。

中间件和钩子hook的区别:中间件更像过滤器,钩子更像行为事件。

中间件创建步骤:使用命令创建中间件文件,写文件代码,注册中间件。

十二、事件系统

事件监听,观察者模式。

十三、IOC容器

关键词:控制反转(ioc)容器,依赖倒转原则。

依赖倒转原则:

依赖注入和依赖反转的不同,就是反转必须依赖于抽象类,如接口,而不是具体类,如mysql类,mongodb类,但是当抽象接口被注入后不能直接被实例化一个接口,所以必须将接口绑定到一个具体类上。这样app会先去调注册树里映射的具体类实例化。依赖反转对依赖于抽象却能实例化具体类的实现很重要。

IOC容器又称为服务容器,小马看到ioc容器的class内用了注册树模式。注册树模式:先把class绑定进数组,用的时候直接取数组key得到具体class。如  Container::Bind(key, value);    container::make(key);

IOC和AOP区别:

一个是控制反转,一个是面向事务,没有任何联系。

在Java中,

IoC,(Inverse of Control)控制反转,其包含两个内容:其一是控制,其二是反转。在程序中,被调用类的选择控制权从调用它的类中移除,转交给第三方裁决。这个第三方指的就是Spring的容器。IoC另解,依赖注入(Dependency Injection),调用类对被调用类的依赖关系由第三方注入,以移除调用类对被调用类的引用。

aop,面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。  AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面(方面)编程。主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。   主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改  变这些行为的时候不影响业务逻辑的代码。

IOC具体做了啥?

绑定依赖:

绑定依赖(将A类依赖的具体类B绑定到A类上)/绑定实例/绑定单例

如果没有找到绑定,PHP会使用反射机制来解析实例和依赖(未绑定的实例直接默认用反射机制实例化)。我们来看源码make方法实现。相关文

反射机制:

IOC容器优缺点:

优点:

1、通过IOC容器,开发人员不需要关注对象是如何创建的,同时增加新类也非常方便,只需要修改配置文件即可实现对象的热插拔。

2、IOC容器可以通过配置文件来确定需要注入的实例化对象,因此非常便于进行单元测试。

缺点:

1、对象是通过反射机制实例化出来的,因此对系统的性能有一定的影响。

2、创建对象的流程变得复杂。

IOC容器与facade的配合:

服务提供者把类全部都先bind到注册树里,控制器中可以直接调用其facade静态代理(view::make();DB::等),由facade静态代理去找注册树(容器类中对应绑定的class,container::make(‘view’))中的对应的class和方法。

十四、Facade

由上面的配合总结,小马把Facade理解为静态::代理。这个其实就是门面设计模式的应用。

Facade在代码中的使用方式:

Facade下的门面类代码非常简单,主要还是去找容器中绑定的那个class和方法。所以综上,整个框架应该是IOC + 注册树 + facade的配合。

未经允许,请勿转载。

相关文章

网友评论

    本文标题:laravel入门到入坑一文就可以了

    本文链接:https://www.haomeiwen.com/subject/yqphjktx.html