laravel框架(关于summer的总结)

官方的laravel

1.核心架构

(请求生命周期、服务容器、服务提供者、facades、contracts)

生命周期:

首先

Laravel 应用的所有请求入口都是 public/index.php 文件。而所有的请求都是由你的 Web 服务器(Apache/Nginx)通过配置引导到这个文件。 index.php 文件代码并不多,但是,这里是加载框架其它部分的起点。index.php文件加载 Composer 生成的自动加载设置,然后从bootstrap/app.php` 脚本中检索 Laravel 应用程序的实例。 Laravel 本身采取的第一个动作是创建一个应用程序 / 服务容器

HTTP / Console 内核

接下来, 根据进入应用程序的请求类型来将传入的请求发送到 HTTP 内核或控制台内核。而这两个内核是用来作为所有请求都要通过的中心位置。 现在,我们先看看位于 app/Http/Kernel.php 中的 HTTP 内核。

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

HTTP 内核还定义了所有请求被应用程序处理之前必须经过的 HTTP 中间件 ,这些中间件处理 HTTP 会话 读写、判断应用是否处于维护模式、 验证 CSRF 令牌 等等。

HTTP 内核的 handle 方法签名相当简单:获取一个 Request ,返回一个 Response。以把该内核想象作一个代表整个应用的大黑盒子,输入 HTTP 请求,返回 HTTP 响应。

服务提供者

内核启动操作中最重要的便是你应用的 服务提供者 了。所有应用下的服务提供者均配置到了 config/app.php 配置文件中的 providers 数组中。 第一步,所有服务提供者的 register 方法会被调用,然后一旦所有服务提供者均注册后, boot 方法才被调用。

服务提供者给予框架开启多种多样的组件,像数据库,队列,验证器,以及路由组件。只要被启动服务提供者就可支配框架的所有功能,所以服务提供者也是 Laravel 整个引导周期最重要组成部分。

请求调度

一旦启动且所有服务提供者被注册,Request 会被递送给路由。路由将会调度请求,交给绑定的路由或控制器,也当然包括路由绑定的中间件。

聚焦服务提供者

服务提供者是 Laravel 真正意义的生命周期中的关键。应用实例一旦创建,服务提供者就被注册,然后请求被启动的应用接管。简单吧!

牢牢掌握服务提供者的构建和其对 Laravel 应用处理机制的原理是非常有价值的。当然,你的应用默认的服务提供会存放在 app/Providers 下面。

默认的, AppServiceProvider 是空白的。这个提供者是一个不错的位置,用于你添加应用自身的引导处理和服务容器绑定。当然,大型项目中,你可能希望创建数个粒度更精细的服务提供者。

Laravel 的生命周期

1、Laravel 采用了单一入口模式,应用的所有请求入口都是 public/index.php 文件。
2、注册类文件自动加载器 : Laravel通过 composer 进行依赖管理,无需开发者手动导入各种类文件,而由自动加载器自行导入。
3、创建服务容器:从 bootstrap/app.php 文件中取得 Laravel 应用实例 $app (服务容器)
创建 HTTP / Console 内核:传入的请求会被发送给 HTTP 内核或者 console 内核进行处理
4、载入服务提供者至容器:在内核引导启动的过程中最重要的动作之一就是载入服务提供者到你的应用,服务提供者负责引导启动框架的全部各种组件,例如数据库、队列、验证器以及路由组件。

5、分发请求:一旦应用完成引导和所有服务提供者都注册完成,Request 将会移交给路由进行分发。路由将分发请求给一个路由或控制器,同时运行路由指定的中间件

[外链图片转存失败(img-cYUInLEd-1563953125765)(C:\Users\Ling\AppData\Roaming\Typora\typora-user-images\1561607893274.png)]

服务容器

Laravel 服务容器是一个用于管理类的依赖和执行依赖注入的强大工具。依赖注入这个花哨名词实质上是指:类的依赖通过构造函数,或者某些情况下通过 “setter” 方法 “注入” 到类中。

服务提供者

服务提供者是所有 Laravel 应用程序的引导中心。你的应用程序,以及 通过服务器引导的 Laravel 核心服务都是通过服务提供器引导。

但是,「引导」是什么意思呢? 通常,我们的可以理解为注册,比如注册服务容器绑定,事件监听器,中间件,甚至是路由。服务提供者是配置应用程序的中心。

当你打开 Laravel 的 config/app.php 文件时,你会看到 providers 数组。数组中的内容是应用程序要加载的所有服务提供者的类。当然,其中有很多 「延迟」 提供者,他们并不会在每次请求的时候都加载,只有他们的服务实际被需要时才会加载。

Facades

Facades 为应用的 服务容器 提供了一个「静态」 接口。Laravel 自带了很多 Facades,可以访问绝大部分功能。Laravel Facades 实际是服务容器中底层类的 「静态代理」 ,相对于传统静态方法,在使用时能够提供更加灵活、更加易于测试、更加优雅的语法。

所有的 Laravel Facades 都定义在 Illuminate\Support\Facades 命名空间下。所以,我们可以轻松的使用 Facade :

facades的工作原理:

在 Laravel 应用中,Facade 就是一个可以从容器访问对象的类。其中核心的部件就是 Facade 类。不管是 Laravel 自带的 Facades,还是自定义的 Facades,都继承自 Illuminate\Support\Facades\Facade 类。

Facade 基类使用了__callStatic() 魔术方法,直到对象从容器中被解析出来后,才会进行调用。在下面的例子中,调用了 Laravel 的缓存系统。通过浏览这段代码,可以假定在 Cache 类中调用了静态方法 get

Contracts

Laravel 的契约是一组由框架提供,定义了核心服务的 interface 集合。比如, Illuminate\Contracts\Queue\Queue契约定义了队列任务所需方法,而 Illuminate\Contracts\Mail\Mailer 契约定义了发送邮件所需方法。

每个契约都拥有相应的框架提供的实现。比如,Laravel 提供了多种驱动的队列实现,并且使用 SwiftMailer 实现了邮件契约。

所有 Laravel 契约都在 它们各自的 GitHub 仓库。这为所有可用的契约以及扩展包开发者们可能用到的单个、解耦的包,提供了一个快速参考入口。

2.基础功能

(路由、中间件、CSRF保护、控制器、请求、响应、视图、URL、Session、表单验证、错误、日志)

路由:

中间件:

中间件提供了一种方便的机制过滤进入应用程序的 HTTP 请求。例如,Laravel 包含一个中间件,验证您的应用程序的用户身份验证。如果用户未被认证,中间件会将用户重定向到登录界面。然而,如果用户通过身份验证,中间件将进一步允许请求到应用程序中。

当然,除了身份认证以外,还可以编写另外的中间件来执行各种任务。例如:CORS 中间件可以负责为所有离开应用的响应添加合适的头部信息;日志中间件可以记录所有传入应用的请求。

Laravel 自带了一些中间件,包括身份验证、CSRF 保护等。所有这些中间件都位于 app/Http/Middleware 目录。

定义中间件:

通过运行 make:middleware Artisan 命令来创建新的中间件:

php artisan make:middleware CheckAge

该命令会在 app/Http/Middleware 目录下创建一个新的 CheckAge 类,在这个中间件中,我们仅允许 age 参数大于 200 的请求对此路由进行访问,否则,将重定向到 home

所有的中间件都是通过 服务容器,因此,可以在你的中间件的构造函数中键入你需要的任何依赖。

CSRF保护

Laravel 可以轻松使地保护你的应用程序免受 cross-site request forgery (CSRF) 攻击,跨站点请求伪造是一种恶意攻击,它凭借已通过身份验证的用户身份来运行未经过授权的命令。

Laravel 会自动为每个活跃的用户的会话生成一个 CSRF「令牌」。该令牌用于验证经过身份验证的用户是否是向应用程序发出请求的用户。

无论何时,当您在应用程序中定义 HTML 表单时,都应该在表单中包含一个隐藏的 CSRF 标记字段,以便 CSRF 保护中间件可以验证该请求,你可以使用 @csrf Blade 指令来生成令牌字段,如下:

@csrf ...

控制器

为了替代在路由文件中以闭包形式定义的所有的请求处理逻辑, 你也许想使用控制类来组织这些行为。控制器能将相关的请求处理逻辑组成一个单独的类。 控制器被存放在 app/Http/Controllers 目录中。

Session

由于 HTTP 驱动的应用程序是无状态的,Session 提供了一种在多个请求之间存储有关用户信息的方法,Laravel 通过同一个可读性强的 API 处理各种自带的后台驱动程序。支持诸如比较热门的 Memcached, Redis 和数据库。

日志

为了帮助你更多的了解应用程序中到底发生了什么,Laravel 提供了强大的日志服务,允许你将日志消息、系统错误日志记录到文件,甚至使用 Slack 通知到你的整个团队。

在 Laravel 框架中,Laravel 使用 Monolog 库,它为各种强大的日志处理提供支持。Laravel 使配置这些处理程序变得简单,允许你混合并匹配它们自定义的应用程序日志处理。

3.前端开发

(blade模板、本地化。前端指南、编辑资源mix)

Blade 模板

Blade 是 Laravel 提供的一个简单而又强大的模板引擎。和其他流行的 PHP 模板引擎不同,Blade 并不限制你在视图中使用原生 PHP 代码。所有 Blade 视图文件都将被编译成原生的 PHP 代码并缓存起来,除非它被修改,否则不会重新编译,这就意味着 Blade 基本上不会给你的应用增加任何负担。Blade 视图文件使用 .blade.php 作为文件扩展名,被存放在 resources/views 目录。

4.安全相关

(用户认证、Api认证、用户授权、Email认证、加密解密、哈希、重置密码)

5.综合话题

(artisan命令行、广播系统、缓存系统、集合、事件系统、文件存数、辅助函数、邮件发送、消息通知、扩展包开发、队列、任务调度)

6.数据库

(快速入门、查询构造器、分页、数据库迁移、数据填充、redis)

7.Eluquent ORM

(快速入门、HTTP测试、命令行测试、数据库测试、测试模拟Mocking)

8.官方扩展包

(cashier交易工具包、浏览器测试dusk、envoy部署工具、horizon队列管理工具、passport Oauth认证、Scout全文搜索、Socialite社会化登录、telescope应用调试工具)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值