日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php 6.0新特性,新版特性 | 序言 | Laravel 6 中文文档

發(fā)布時(shí)間:2025/3/19 php 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 6.0新特性,新版特性 | 序言 | Laravel 6 中文文档 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

新版特性

由 學(xué)院君 創(chuàng)建于1年前, 最后更新于 1年前

版本號(hào) #2

17909 views

7 likes

2 collects

Laravel 6.0(LTS 版本) 在 Laravel 5.8 的基礎(chǔ)上繼續(xù)進(jìn)行優(yōu)化,包括引入語(yǔ)義化版本、兼容 Laravel Vapor、優(yōu)化授權(quán)響應(yīng)、支持任務(wù)中間件、新增懶集合、優(yōu)化數(shù)據(jù)庫(kù)子查詢、將前端腳手架提取到獨(dú)立的 Composer 包 laravel/ui、以及多個(gè) bug 修復(fù)和可用性的提升。

語(yǔ)義化版本

Laravel 框架包 laravel/framework 現(xiàn)在遵循語(yǔ)義化版本標(biāo)準(zhǔn)。這使得框架得以和其他已經(jīng)遵循該版本標(biāo)準(zhǔn)的 Laravel 擴(kuò)展包保持一致,不過(guò) Laravel 的發(fā)布周期將保持不變。

兼容 Laravel Vapor

Laravel 6.0 提供了對(duì) Laravel Vapor 的兼容,這是一個(gè)針對(duì) Laravel 應(yīng)用的自動(dòng)擴(kuò)容無(wú)服務(wù)器部署平臺(tái)。Vapor 對(duì)在 AWS Lambda 上管理 Laravel 應(yīng)用以及與 SQS 隊(duì)列、數(shù)據(jù)庫(kù)、Redis 集群、網(wǎng)絡(luò)、CloudFront CDN 進(jìn)行交互的復(fù)雜性進(jìn)行了抽象。

通過(guò) Ignition 優(yōu)化異常

Laravel 6.0 支持 Ignition,這個(gè)一個(gè)開源的錯(cuò)誤和異常詳情頁(yè)項(xiàng)目,由 Freek Van der Herten 和 Marcel Pociot 創(chuàng)建并維護(hù)。相對(duì)于之前版本的錯(cuò)誤顯示,Ignition 提供了諸多便捷之處,比如優(yōu)化了 Blade 錯(cuò)誤文件和行號(hào)處理、針對(duì)常見(jiàn)問(wèn)題的可執(zhí)行解決方案、代碼編輯、異常分享、以及經(jīng)過(guò)優(yōu)化的用戶體驗(yàn)。

優(yōu)化授權(quán)響應(yīng)

在之前版本的 Laravel 中,獲取并提供自定義授權(quán)消息給終端用戶很困難,主要難點(diǎn)在于如何向終端用戶解釋清楚為什么特定的請(qǐng)求被拒絕了。在 Laravel 6.0 中,我們可以使用 Gate::inspect 方法和授權(quán)響應(yīng)消息來(lái)輕松實(shí)現(xiàn)。例如,給定如下策略方法:

/**

* 判斷用戶是否可以查看指定的航班.

*

* @param \App\User $user

* @param \App\Flight $flight

* @return mixed

*/

public function view(User $user, Flight $flight)

{

return $this->deny('Explanation of denial.');

}

接下來(lái)我們可以通過(guò) Gate::inspect 方法獲取授權(quán)策略的響應(yīng),然后再通過(guò)響應(yīng)示例的 message() 方法獲取授權(quán)消息:

$response = Gate::inspect('view', $flight);

if ($response->allowed()) {

// 用戶被授權(quán)可以訪問(wèn)航班...

}

if ($response->denied()) {

echo $response->message();

}

此外,當(dāng)在路由或控制器中使用 $this->authorize 或者 Gate::authorize 方法時(shí),這些自定義的消息會(huì)被自動(dòng)返回給前端。

任務(wù)中間件

任務(wù)中間件允許你封裝自定義的隊(duì)列任務(wù)異常業(yè)務(wù)邏輯,避免在任務(wù)自身處理中混入對(duì)應(yīng)樣板代碼。例如,在之前的 Laravel 版本中,你可能需要在頻率限制回調(diào)中封裝某個(gè)任務(wù)的 handle 方法處理邏輯:

/**

* 執(zhí)行任務(wù)

*

* @return void

*/

public function handle()

{

Redis::throttle('key')->block(0)->allow(1)->every(5)->then(function () {

info('Lock obtained...');

// 處理任務(wù)...

}, function () {

// 無(wú)法獲取到鎖...

return $this->release(5);

});

}

而在 Laravel 6.0 中,該業(yè)務(wù)邏輯可以被提取到任務(wù)中間件中,從而將你的任務(wù) handle 方法從頻率限制中解放出來(lái):

namespace App\Jobs\Middleware;

use Illuminate\Support\Facades\Redis;

class RateLimited

{

/**

* 處理隊(duì)列任務(wù).

*

* @param mixed $job

* @param callable $next

* @return mixed

*/

public function handle($job, $next)

{

Redis::throttle('key')

->block(0)->allow(1)->every(5)

->then(function () use ($job, $next) {

// Lock obtained...

$next($job);

}, function () use ($job) {

// Could not obtain lock...

$job->release(5);

});

}

}

創(chuàng)建完中間件后,可以通過(guò)在任務(wù)類的 middleware 方法中返回中間件數(shù)組來(lái)將其追加到隊(duì)列任務(wù)中:

use App\Jobs\Middleware\RateLimited;

/**

* Get the middleware the job should pass through.

*

* @return array

*/

public function middleware()

{

return [new RateLimited];

}

懶集合

許多開發(fā)者已經(jīng)使用過(guò) Laravel 功能強(qiáng)大的集合方法了,在 Laravel 6.0 中新引入了一個(gè) LazyCollection 類來(lái)對(duì) Collection 類進(jìn)行補(bǔ)充,LazyCollection 底層基于 PHP 的生成器實(shí)現(xiàn),適用于處理大型數(shù)據(jù)集。

例如,假設(shè)你的應(yīng)用需要處理 GB 級(jí)別的日志文件,并使用 Laravel 的集合方法來(lái)解析日志,這個(gè)時(shí)候?qū)⒄麄€(gè)日志文件一次性讀取到內(nèi)存顯然是不合適的,這個(gè)時(shí)候懶集合類就派上用場(chǎng)了,它可以每次只讀取文件的一小部分到內(nèi)存:

use App\LogEntry;

use Illuminate\Support\LazyCollection;

LazyCollection::make(function () {

$handle = fopen('log.txt', 'r');

while (($line = fgets($handle)) !== false) {

yield $line;

}

})

->chunk(4)

->map(function ($lines) {

return LogEntry::fromLines($lines);

})

->each(function (LogEntry $logEntry) {

// Process the log entry...

});

或者,假設(shè)你需要迭代 10000 個(gè) Eloquent 模型實(shí)例,如果使用傳統(tǒng)的 Laravel 集合,所有 10000 個(gè) Eloquent 模型會(huì)同時(shí)加載到內(nèi)存中:

$users = App\User::all()->filter(function ($user) {

return $user->id > 500;

});

不過(guò),從 Laravel 6.0 開始,查詢構(gòu)建器的 cursor 方法已經(jīng)被升級(jí)為返回 LazyCollection 實(shí)例,這樣一來(lái),我們就可以像之前一樣執(zhí)行一次數(shù)據(jù)庫(kù)查詢,但是每次只會(huì)加載一個(gè) Eloquent 模型到內(nèi)存。在這個(gè)示例中,filter 回調(diào)只有在迭代完每個(gè)用戶時(shí)才會(huì)執(zhí)行,從而極大減少內(nèi)存的使用量:

$users = App\User::cursor()->filter(function ($user) {

return $user->id > 500;

});

foreach ($users as $user) {

echo $user->id;

}

Eloquent 子查詢優(yōu)化

Laravel 6.0 引入了多個(gè)數(shù)據(jù)庫(kù)子查詢優(yōu)化和增強(qiáng)支持。例如,假設(shè)我們有一個(gè)航班目的地表 destinations 和飛向這些目的地的航班表 flights,flights 表包含了一個(gè) arrived_at 字段來(lái)表示航班到達(dá)目的地的時(shí)間。

使用 Laravel 6.0 提供的新的子查詢功能,我們可以通過(guò)一個(gè)查詢獲取所有的航班目的地以及最新到達(dá)這些目的地的航班名稱:

return Destination::addSelect(['last_flight' => Flight::select('name')

->whereColumn('destination_id', 'destinations.id')

->orderBy('arrived_at', 'desc')

->limit(1)

])->get();

此外,我們還可以使用查詢構(gòu)建器方法 orderBy 添加的新的子查詢方法基于到達(dá)目的地的最晚航班到達(dá)時(shí)間對(duì)所有航班目的地進(jìn)行排序,同樣,這也可以通過(guò)一次數(shù)據(jù)庫(kù)查詢完成:

return Destination::orderByDesc(

Flight::select('arrived_at')

->whereColumn('destination_id', 'destinations.id')

->orderBy('arrived_at', 'desc')

->limit(1)

)->get();

Laravel UI

之前版本 Laravel 提供的典型的前端腳手架代碼現(xiàn)在被提取到獨(dú)立的 Composer 擴(kuò)展包 laravel/ui 中,這樣一來(lái)可以讓 UI 腳手架代碼的開發(fā)和維護(hù)與主框架分離。所以,在默認(rèn)框架腳手架代碼中,現(xiàn)在已經(jīng)剔除了 Bootstrap 和 Vue 相關(guān)代碼,make:auth 命令也被提取出去。

如果想要恢復(fù)之前版本的 Vue/Bootstrap 腳手架代碼,可以安裝 laravel/ui 擴(kuò)展包,并使用 Artisan 命令 ui 來(lái)安裝前端腳手架代碼:

composer require laravel/ui

php artisan ui vue --auth

總結(jié)

以上是生活随笔為你收集整理的php 6.0新特性,新版特性 | 序言 | Laravel 6 中文文档的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。