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

2020-06-09 15:35:34 浏览数 (1)

01

什么是 laravel

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

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

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

02

laravel 有哪些版本

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

03

路由

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

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

代码语言:javascript复制
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

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

代码语言:javascript复制
Route::match(['get', 'post'], '/', function () {
    //支持两种方法
});

Route::any('foo', function () {
    //可以接收所有的方法
});

3. 访问控制(节流)

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

代码语言:javascript复制
Route::middleware('auth:api', 'throttle:60,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

4. 路由缓存/清理

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

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

代码语言:javascript复制
php artisan route:cache

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

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

代码语言:javascript复制
php artisan route:clear

04

中间件

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

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

(1)Authenticate 中间件

源文件:appHttpMiddlewareHttpMiddlewareAuthenticate.php

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

(2)CheckForMaintenanceMode 中间件

源文件:appHttpMiddlewareCheckForMaintenanceMode.php

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

(3)EncryptCookies 中间件

源文件:appHttpMiddlewareEncryptCookies.php

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

(4)RedirectIfAuthenticated 中间件

源文件:appHttpMiddlewareRedirectIfAuthenticated.php

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

(5)TrimStrings 中间件

源文件:appHttpMiddlewareTrimStrings.php

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

(6)TrustProxies 中间件

源文件:appHttpMiddlewareTrustProxies.php

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

(7)VerifyCsrfToken 中间件

源文件:appHttpMiddlewareVerifyCsrfToken.php

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

05

laravel 迁移/队列

1. 迁移

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

代码语言:javascript复制
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));

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

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

代码语言:javascript复制
$table->timestamp('created_at')->useCurrent();

2. 队列

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

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

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

06

laravel 核心服务容器

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

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

绑定基础

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

代码语言:javascript复制
$this->app->singleton('HelpSpotAPI', function ($app) {
    return new HelpSpotAPI($app->make('HttpClient'));
})

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

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

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

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

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

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

0 人点赞