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

 一篇精华,让你对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 框架自 有史以来也是最快的。

02


laravel 有哪些版本

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

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);

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

Route::match(['get', 'post'], '/', function () {
    //支持两种方法
});


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


3. 访问控制(节流)

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

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

 4. 路由缓存/清理

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

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

php artisan route:cache

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

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

php artisan route:clear

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'));

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

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

$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」方法「注入」到类中。

绑定基础

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

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

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

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

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

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

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

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


欢迎大家加入WeChat 技术交流群「wechat:xzzs730

技术群交流 长按 ↑ 上方二维码 扫码加群 

链接地址:技术群分享-存档记录

https://github.com/gtcarry888/WeChat-Sharing-records

如有其他问题,可留言至 gtcarry999@163.com 邮箱。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八点半的Bruce丶D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值