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————————