手记

无涯教程: 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 downphp 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();

});



0人推荐
随时随地看视频
慕课网APP