淘先锋技术网

首页 1 2 3 4 5 6 7

新版本在模型中添加了更多的增强函数,.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升级指南

 

来源:https://www.learnfk.com/course-laravel