Laravel 8 - 新功能

Laravel 8 - 新功能 首页 / Laravel8入门教程 / Laravel 8 - 新功能

9月8日Laravel 8将推出,新版本在模型中添加了更多的增强函数,.env,rate limiting,route cacheing,factory,controller namespace命名空间等。

*)默认Model模型目录

Laravel 8版本将为所有Eloquent模型创建新目录"Models"。

目前,所有模型都是默认存储在app/user.php,app/post.php等文件夹中。但是Laravel 8提供新目录"Models"以将所有模型存储在该文件夹。

旧Model路径:

app/User.php

app/Post.php

新Model路径:

app/Models/User.php

app/Models/Post.php

*)增强PHP Artisan服务

php artisan serve

在Laravel8之前,你在.env配置了变量值,需要重新服务命令,在Laravel8中,变量值将自动更新。

*)删除控制器命名空间前缀

Laravel 8从以前版本的Laravel中删除了来自RouteserviceProvider.php文件的$名称空间变量前缀。因此,基本上它将自动将"App\Htpp\Controllers"命名空间应用于控制器。

旧文件 RouteServiceProvider.php:

 <?php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider

{

/**

* This namespace is applied to your controller routes.

*

* In addition, it is set as the URL generator's root namespace.

*

* @var string

*/

protected $namespace = 'App\Http\Controllers';

/**

* The path to the "home" route for your application.

*

* @var string

*/

public const HOME = '/home';

....

新文件 RouteServiceProvider.php:

 <?php

namespace App\Providers;

use Illuminate\Cache\RateLimiting\Limit;

use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

use Illuminate\Http\Request;

use Illuminate\Support\Facades\RateLimiter;

use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider

{

/**

* The path to the "home" route for your application.

*

* This is used by Laravel authentication to redirect users after login.

*

* @var string

*/

public const HOME = '/home';

/**

* Define your route model bindings, pattern filters, etc.

*

* @return void

*/

public function boot()

{

$this->configureRateLimiting();

$this->routes(function () {

Route::middleware('web')

->group(base_path('routes/web.php'));

Route::prefix('api')

->middleware('api')

->group(base_path('routes/api.php'));

});

}

....

*)增强速率限制

速率限制可以在路由中。也可以应用到中间件中,以便设置每次的请求数。

RouteServiceProvider.php

<?php 

namespace App\Providers;

use Illuminate\Cache\RateLimiting\Limit;

use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

use Illuminate\Http\Request;

use Illuminate\Support\Facades\RateLimiter;

use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider

{

/**

* The path to the "home" route for your application.

*

* This is used by Laravel authentication to redirect users after login.

*

* @var string

*/

public const HOME = '/home';

/**

* Define your route model bindings, pattern filters, etc.

*

* @return void

*/

public function boot()

{

RateLimiter::for('uploadFile' function (Request $request) {

Limit::perMinute(8)->by($request->ip()),

});

RateLimiter::for('downloadFile' function (Request $request) {

if ($request->user()->isSubscribed()) {

return Limit::none();

}

Limit::perMinute(8)->by($request->ip()),

});

$this->configureRateLimiting();

$this->routes(function () {

Route::middleware('web')

->group(base_path('routes/web.php'));

Route::prefix('api')

->middleware('api')

->group(base_path('routes/api.php'));

});

}

/**

* Configure the rate limiters for the application.

*

* @return void

*/

protected function configureRateLimiting()

{

RateLimiter::for('api' function (Request $request) {

return Limit::perMinute(60);

});

}

}

使用速率限制(Rate Limit)

 

Route::get('upload','[email protected]')->->middleware('throttle:uploadFile');

Route::get('download','[email protected]')->->middleware('throttle:downloadFile');

/* or use it no group */

Route::middleware(['throttle:uploadFile'])->group(function () {

});

*)Route Caching 增强

无涯教程使用"php artisan route:cache"命令缓存路由。在laravel的早期版本中,缓存路由后,如果您要添加新路由,那么将需要执行手动清除再生成命令。但在Laravel8中自动将新路由添加到缓存文件中。

*)更新分页设计

laravel 8默认的分页类已删除,使用tailwind框架作为默认分类.。如果要使用Bootstrap框架,则需要在AppServiceProvider文件中调用"useBootstrap()"。

 

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

use Illuminate\Pagination\Paginator;

class AppServiceProvider extends ServiceProvider

{

/**

* Register any application services.

*

* @return void

*/

public function register()

{

}

/**

* Bootstrap any application services.

*

* @return void

*/

public function boot()

{

Paginator::useBootstrap();//在这里增加

}

}

*)更新关闭事件侦听器

Laravel 8更改了语法来调用事件侦听器。所以可以向你展示具有旧语法的示例:

旧语法:

 

Event::listen(OrderShipped::class function(OrderShipped $event) {

//Do something

});

新语法:

 

Event::listen(function(OrderShipped $event) {

/* Do something */

});

*)队列事件监听器

当调用模型创建(creating),创建(created),更新(updating),更新(updated)等事件时,可以轻松地将其排入队列。

让无涯教程来看一个例子:

Product Model:

 

class Product extends Model {

protected static function booting()

{

static::created(queueable(function(Product $product) {

/* Write something Here */

}))

static::updated(queueable(function(Product $product) {

/* Write something Here */

}))

}

}

*)维护模式:密码访问

如果您想要网站关闭和开启,那么无涯教程正在使用以下命令:

php artisan down

php artisan up

Laravel 8提供了一种方法,可以为很多人授予访问权限的密码。您可以使用密码并忽略cookie,因此直到您的网站启动,他们才可以访问旧版本。

 

php artisan down --secret=new-pass

现在它将创建新的路由,如果您访问此路由,则它将忽略cookie并通过以下URL访问网站:

 

https://www.example.com/new-pass

*)维护模式:预呈现页面

Laravel 8添加了新选项,可以在您的网站关闭时立即返回页面。您可以将render选项与文件路径一起使用,它将显示该文件,直到网站上线(up):

php artisan down --render="errors::backSoon"

您也可以使用命令:

php artisan down --redirect=/ --status=200 --secret=myPassword --render="errors::503"

*)队列批处理

Laravel 8提供了新函数“排队作业批处理",因此您可以一次将多个作业批量添加到队列中。有一个then(),catch()和finally()回调将在所有作业完成时触发。

  

Bus::batch([

new SendMailJob(),

new SendMailJob(),

new SendMailJob(),

new SendMailJob(),

new SendMailJob(),

])->then(function(Batch $batch){

//队列执行成功时调用

})->catch(function(Batch $batch) {

//队列执行失败时调用

})->finally(function(Batch $batch) {

//不管失败还是成功都会调用

})->dispatch();

*)队列backoff()

当您可以在Queue作业类中定义时,Laravel 8添加了新的方法backoff()。您可以使用数组定义编号时间以设置重试时间。

您可以像下面这样称呼工作:

class ExampleJob

{

/**

* Calculate the number of seconds to wait before retrying the job.

*

* @return array

*/

public function backoff()

{

return [1 5 10];

}

....

}

*)Laravel Factory

Laravel 8模型对工厂进行了改进,因此您可以轻松地从工厂创建新的虚拟记录。他们添加了新的times(),以便您可以定义创建的记录数选项。

Route::get('test-factory'function(){

return User::factory()->create();

});

laravel 8添加了更多函数,您还可以从此处查看laravel 8升级指南:Laravel升级指南

Laravel8目录

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入浅出计算机组成原理 -〔徐文浩〕

.NET Core开发实战 -〔肖伟宇〕

架构实战案例解析 -〔王庆友〕

软件设计之美 -〔郑晔〕

跟月影学可视化 -〔月影〕

跟着高手学复盘 -〔张鹏〕

基于人因的用户体验设计课 -〔刘石〕

技术领导力实战笔记 2022 -〔TGO 鲲鹏会〕

手把手带你搭建推荐系统 -〔黄鸿波〕

好记忆不如烂笔头。留下您的足迹吧 :)