全局梳理、分析、总结 laravel 的核心概念

简介: 还在等什么,快来一起讨论关注吧,公众号【八点半技术站】,欢迎加入社群

Hello,大家好。我是公众号“八点半技术站”的小编-Bruce.D。

今天是周四(2020-03-26),俗语还是它 “一日之计在于晨” ,分享给大家的是 「框架 模块」- laravel全局讲解。在这里我会讲解一些大家平时注意不到的知识以及 laravel 框架的核心要点(其余,大家自行官方学习)。

如果您点进行来了,希望您可以花费3分钟时间来进行浏览,我认为您如果可以耐心浏览完毕,从中一定可以让你学习到不一样的知识点。

01

什么是 laravel

Laravel 是 Taylor Otwell 开发的一款基于 PHP 语言的 Web 开源框架,采用了 MVC 的架构模式。

由于 Laravel 具备 Rails 敏捷开发等优秀特质,深度集成 PHP 强大的扩展包(Composer)生态,让 Laravel 在发布之后的短短几年时间得到了极其迅猛的发展。

下面 我分享一张 图片,此图是goole提供,laravel 在过去七年成长速度,在 php 框架自 有史以来也是最快的。

image.gif编辑

02

laravel 有哪些版本

以下分别是 laravel 版本对应 发布日期 与 php版本 要求。

网络异常,图片无法展示
|
image.gif 编辑

03

路由

laravel 的路由也是自身框架的一个特征点,它的路由样式用法丰富且又简洁明了。让开发者甚是喜欢。接下来讲解的每个模块,都是为了刚接触 laravel 框架的开发者 更容易搞懂 laravel 全局核心要点。以及方便熟悉laravel 的开发者进行参考。

1. 路由器允许响应任何 HTTP 请求的路由

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

image.gif

2. 有时候一个响应多个 Http 请求,这时候使用 match 方法,也可以使用any 方法,any 方法可以实现响应所有 HTTP 请求的路由。

Route::match(['get', 'post'], '/', function () {
    //支持两种方法
});
Route::any('foo', function () {
    //可以接收所有的方法
});

image.gif

3. 访问控制(节流)

Laravel 包含了一个 middleware 用于控制应用程序对路由的访问。如果想要使用, 请将 throttle 中间件分配给一个路由或者一个路由组。throttle 中间件会接收两个参数,这两个参数决定了在给定的分钟数内可以进行的最大请求数。例如,让我们指定一个经过身份验证并且用户每分钟访问频率不超过 60 次的路由组:

Route::middleware('auth:api', 'throttle:60,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

image.gif

4. 路由缓存/清理

(注:基于闭包的路由无法被缓存。要使用路由缓存,你需要将代码从闭包转移到控制器类中)

如果您的应用程序只使用了基于控制器的路由,那么您应该利用 Laravel 的路由缓存。路由缓存会大大减少注册所有路由所需的时间。在某些情况下,路由注册的速度甚至能快上 100 倍。要生成路由缓存,只需执行 artisan 命令

php artisan route:cache

image.gif

运行此命令后,将在每个请求上加载缓存的路由文件。记住,如果添加了任何新的路由,则需要重新生成新的路由缓存。因此,您应该在项目部署的时候运行 route:cache 命令。

您可以使用 route:clear 命令来清除路由缓存:

php artisan route:clear

image.gif

04

中间件

laravel 的中间件想必大家不会那么陌生吧。它自带了一些中间件。如果大家想具体知道 laravel 具体启动哪些中间件,我们是可以通过 app\Http\Kernel.php 文件查看的。对于以\App\Http\Middleware\ 头的中间件(位于 app/Http/Middleware 目录)是我们可以对其行为进行定制的中间件。

下面我也会讲一些中间件,介绍它的项目文件、地址、以及作用,方便大家查找参考。

(1)Authenticate 中间件

源文件:app\Http\Middleware\Http\Middleware\Authenticate.php

作用:用户身份验证。可修改 redirectTo 方法,返回未经身份验证的用户应该重定向到的路径。

(2)CheckForMaintenanceMode 中间件

源文件:app\Http\Middleware\CheckForMaintenanceMode.php

作用:检测项目是否处于 维护模式。可通过 $except 数组属性设置在维护模式下仍能访问的网址。

(3)EncryptCookies 中间件

源文件:app\Http\Middleware\EncryptCookies.php

作用:对 Cookie 进行加解密处理与验证。可通过 $except 数组属性设置不做加密处理的 cookie。

(4)RedirectIfAuthenticated 中间件

源文件:app\Http\Middleware\RedirectIfAuthenticated.php

作用:当请求页是 注册、登录、忘记密码 时,检测用户是否已经登录,如果已经登录,那么就重定向到首页,如果没有就打开相应界面。可以在 handle 方法中定制重定向到的路径。

(5)TrimStrings 中间件

源文件:app\Http\Middleware\TrimStrings.php

作用:对请求参数内容进行 前后空白字符清理。可通过 $except 数组属性设置不做处理的参数。

(6)TrustProxies 中间件

源文件:app\Http\Middleware\TrustProxies.php

作用:配置可信代理。可通过 $proxies 属性设置可信代理列表,$headers 属性设置用来检测代理的 HTTP 头字段。

(7)VerifyCsrfToken 中间件

源文件:app\Http\Middleware\VerifyCsrfToken.php

作用:验证请求里的令牌是否与存储在会话中令牌匹配。可通过 $except 数组属性设置不做 CSRF 验证的网址。

05

laravel 迁移/队列

1. 迁移

可以利用 raw() 语句来执行原生 SQL :

$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));

image.gif

以上这种用法适用于 Laravel 官方支持的所有数据库驱动器。

自 Laravel 5.1.25 以后,可以使用 useCurrent() ,如下:

$table->timestamp('created_at')->useCurrent();

image.gif

2. 队列

Laravel 队列为不同的后台队列服务提供统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。

队列配置文件存放在 config/queue.php 。每一种队列驱动的配置都可以在该文件中找到,包括数据库,Beanstalkd ,Amazon SQS,Redis,以及同步(本地使用)驱动。其中还包含了一个 null 队列驱动用于那些放弃队列的任务。

(因 laravel 队列系统内容过多,这里只为参考者抛砖引玉,详细自行goole)

06

laravel 核心服务容器

Laravel 的核心就是一个 IoC 容器,根据文档,称其为 “服务容器”,顾名思义,该容器提供了整个框架中需要的一系列服务。

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

绑定基础

绑定一个单例可以在 App\Providers\AppServiceProvider 中的 register 方法中注册。singleton 方法将类或接口绑定到只解析一次的容器中。一旦单例绑定被解析,相同的对象实例会在随后的调用中返回到容器中:

$this->app->singleton('HelpSpot\API', function ($app) {
    return new HelpSpot\API($app->make('HttpClient'));
})

image.gif

具体资料可参考下方两个链接:

服务容器-1 :https://learnku.com/docs/laravel/5.5/container/1289

服务容器-2 :https://www.insp.top/learn-laravel-container

【问:为什么这个 "服务容器" 会放参考链接呢?】

【答:“服务容器” 这是 laravel 核心特征】

————————end————————

相关文章
|
2月前
|
前端开发 JavaScript UED
第五章(原理篇) 微前端技术之模块联邦与动态加载
第五章(原理篇) 微前端技术之模块联邦与动态加载
|
25天前
|
缓存 监控 中间件
探究Django中间件的神奇:功能、应用场景和核心方法
在Django中,中间件是一个强大的概念,它们提供了一种灵活的方式来处理请求和响应。本文将探讨Django中间件的基本概念、常见应用场景以及中间件类中的父类和核心方法。
|
2月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的商业辅助决策系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的商业辅助决策系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
2月前
|
存储 监控 安全
插件机制详解:原理、设计与最佳实践
插件机制详解:原理、设计与最佳实践
169 0
|
存储 缓存 JavaScript
一文梳理Vue3核心原理
一文梳理Vue3核心原理 前言 本篇文章更多是以梳理的视角进行讲述,将各个原理细节串在一起,方便查漏补缺,而非为了讲懂某个原理,当然也会大致讲解。所以如果某个原理不太清楚,请自行查阅其他文章,我也会尽量给出相关的阅读推荐。 ==本文阅读需要你有一定的vue应用程序开发经验并了解一些原理== 接下来先废话一下,关注知识点的可以直接跳过前言部分 首先,我们先回到最初的起点是为什么要使用Vue框架,它为我们做了什么工作: 能开发出一个应用? 性能好、构建产物轻量? 对用户友好,声明式代码心智负担小? 可组件化开发? 社区活跃,生态丰富? ...
628 1
|
前端开发
前端学习案例1-组件优化1
前端学习案例1-组件优化1
53 0
前端学习案例1-组件优化1
|
前端开发
前端学习案例1-组件优化1
前端学习案例1-组件优化1
53 0
前端学习案例1-组件优化1
|
前端开发
前端学习案例2-组件优化2
前端学习案例2-组件优化2
66 0
前端学习案例2-组件优化2
|
供应链 小程序 安全
DDD实战之三:整体工作框架和全局需求分析(下)
DDD实战之三:整体工作框架和全局需求分析(下)
DDD实战之三:整体工作框架和全局需求分析(下)
|
小程序 前端开发 Java
DDD实战之三:整体工作框架和全局需求分析(上)
DDD实战之三:整体工作框架和全局需求分析(上)
DDD实战之三:整体工作框架和全局需求分析(上)