<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          看看 Laravel 9 的新功能

          共 7772字,需瀏覽 16分鐘

           ·

          2022-02-09 16:15


          Laravel v9 將是 Laravel 的下一個(gè) LTS 版本,它將在 2022 年 2 月的某個(gè)時(shí)間發(fā)布。在這篇文章中,我們想概述迄今為止宣布的所有新功能和更改。


          Laravel 9 發(fā)布日期變更

          Laravel v9 原定于今年 9 月左右發(fā)布,但 Laravel 團(tuán)隊(duì)決定將此版本推遲到 2022 年 2 月:

          Laravel 使用各種社區(qū)驅(qū)動(dòng)的包以及九個(gè) Symfony 組件來(lái)實(shí)現(xiàn)框架內(nèi)的許多功能。Symfony 6.0 將于 11 月發(fā)布。出于這個(gè)原因,我們選擇將 Laravel 9.0 的發(fā)布推遲到 2022
          年。通過(guò)推遲發(fā)布,我們可以將底層的 Symfony 組件升級(jí)到 Symfony 6.0,而不必被迫等到 2022 年 9 月才能執(zhí)行此升級(jí)。此外,這更好地為我們未來(lái)的發(fā)布做好了準(zhǔn)備,因?yàn)槲覀兊哪甓劝l(fā)布總是在 Symfony 發(fā)布后兩個(gè)月發(fā)布。

          這也將推動(dòng)未來(lái)的主要版本,以下是未來(lái)的時(shí)間表:

          • Laravel 9:2022 年 2 月 8 日

          • Laravel 10:2023 年 2 月 7 日

          PHP 8 將成為 Laravel 9 中的最低版本

          由于 Laravel 9 需要 Symfony 6.0 并且它的最低要求是 PHP 8,這意味著 Laravel 9 將具有同樣的限制。


          新的路由列表設(shè)計(jì)

          routes:list命令已經(jīng)包含在 Laravel 中很長(zhǎng)時(shí)間了,有時(shí)會(huì)出現(xiàn)的一個(gè)問(wèn)題是,如果您定義了龐大而復(fù)雜的路由,則嘗試在控制臺(tái)中查看它們可能會(huì)變得混亂。多虧了Nuno Maduro 的 PR,讓路由列表有了新的設(shè)計(jì)。

          新的測(cè)試覆蓋選項(xiàng)

          一個(gè)新artisan test --coverage選項(xiàng)將直接在終端上顯示測(cè)試覆蓋率。它還包括一個(gè)--min選項(xiàng),您可以使用該選項(xiàng)來(lái)指示測(cè)試覆蓋率的最低閾值強(qiáng)制執(zhí)行。

          匿名的數(shù)據(jù)庫(kù)遷移類(lèi)

          今年早些時(shí)候,Laravel 8.37 推出了一個(gè)名為Anonymous Migrations的新功能,可以防止遷移類(lèi)名稱(chēng)沖突。

          use Illuminate\Database\Migrations\Migration;
          use Illuminate\Database\Schema\Blueprint;
          use Illuminate\Support\Facades\Schema;

          return new class extends Migration {

          /**
          * Run the migrations.
          *
          * @return void
          */

          public function up()
          {
          Schema::table('people', function (Blueprint $table) {
          $table->string('first_name')->nullable();
          });
          }
          };

          當(dāng) Laravel 9 發(fā)布時(shí),這將是你運(yùn)行?php artisan make:migration 時(shí)的默認(rèn)設(shè)置 。


          新的查詢構(gòu)造器

          感謝 Chris Morrell,Laravel 9 將提供一個(gè)新的 Query Builder 界面,你可以看到這個(gè)合并的 PR以了解所有細(xì)節(jié)。


          對(duì)于在 IDE 中依賴類(lèi)型提示進(jìn)行靜態(tài)分析、重構(gòu)或代碼完成的開(kāi)發(fā)人員來(lái)說(shuō),缺乏共享接口或 IDE 之間的繼承可能Query\Builder會(huì)非常棘手:Eloquent\BuilderEloquent\Relation

          return Model::query()
          ->whereNotExists(function($query) {
          // $query is a Query\Builder
          })
          ->whereHas('relation', function($query) {
          // $query is an Eloquent\Builder
          })
          ->with('relation', function($query) {
          // $query is an Eloquent\Relation
          });

          此功能添加了一個(gè)新的?Illuminate\Contracts\Database\QueryBuilder?接口和一個(gè)?Illuminate\Database\Eloquent\Concerns\DecoratesQueryBuilder?實(shí)現(xiàn)該接口以代替現(xiàn)有?__call?實(shí)現(xiàn)的特征。


          PHP 8 字符串函數(shù)

          由于 PHP 8 將是最低要求,Tom Schlick 提交了一個(gè)PR以在類(lèi)內(nèi)部使用str_contains(),str_starts_with()str_ends_with()函數(shù)。\Illuminate\Support\Str


          從 SwiftMailer 到 Symfony Mailer

          Symfony Mailer 的支持由Dries VintsJames BrooksJulius Kiekbusch 提供

          以前的 Laravel 版本使用Swift Mailer庫(kù)來(lái)發(fā)送外發(fā)電子郵件。但是,該庫(kù)不再維護(hù),并由 Symfony Mailer 接替。

          請(qǐng)查看升級(jí)指南以了解有關(guān)確保您的應(yīng)用程序與 Symfony Mailer 兼容的更多信息。

          Flysystem 3.x

          Flysystem 3.x 支持由Dries Vints 提供

          Laravel 9.x 將我們上游的 Flysystem 依賴升級(jí)到 Flysystem 3.x。Flysystem 為Storage外觀提供的所有文件系統(tǒng)交互提供支持。

          改進(jìn)的 Eloquent Accessors / Mutators

          Taylor Otwell貢獻(xiàn)了改進(jìn)的 Eloquent 訪問(wèn)器/修改器。

          Laravel 9.x 提供了一種定義 Eloquent訪問(wèn)器和修改器的新方法。在之前的 Laravel 版本中,定義訪問(wèn)器和修改器的唯一方法是在模型上定義前綴方法,如下所示:

          public function getNameAttribute($value)
          {
          return strtoupper($value);
          }

          public function setNameAttribute($value)
          {
          $this->attributes['name'] = $value;
          }

          但是,在 Laravel 9.x 中,您可以使用單個(gè)非前綴方法通過(guò)類(lèi)型提示返回類(lèi)型來(lái)定義訪問(wèn)器和修改器Illuminate\Database\Eloquent\Casts\Attribute

          use Illuminate\Database\Eloquent\Casts\Attribute;

          public function name(): Attribute
          {
          return new Attribute(
          get: fn ($value) => strtoupper($value),
          set: fn ($value) => $value,
          );
          }

          此外,這種定義訪問(wèn)器的新方法將緩存屬性返回的對(duì)象值,就像自定義轉(zhuǎn)換類(lèi)一樣:

          use App\Support\Address;
          use Illuminate\Database\Eloquent\Casts\Attribute;

          public function address(): Attribute
          {
          return new Attribute(
          get: fn ($value, $attributes) => new Address(
          $attributes['address_line_one'],
          $attributes['address_line_two'],
          ),
          set: fn (Address $value) => [
          'address_line_one' => $value->lineOne,
          'address_line_two' => $value->lineTwo,
          ],
          );
          }

          使用枚舉的隱式路由綁定

          隱式枚舉綁定由Nuno Maduro貢獻(xiàn)。

          PHP 8.1 引入了對(duì)Enums的支持。Laravel 9.x 引入了在路由定義中鍵入提示 Enum 的能力,并且 Laravel 只會(huì)在該路由段是 URI 中的有效 Enum 值時(shí)調(diào)用該路由。否則,將自動(dòng)返回 HTTP 404 響應(yīng)。例如,給定以下枚舉:

          enum Category: string
          {
          case Fruits = 'fruits';
          case People = 'people';
          }

          {category}您可以定義僅當(dāng)路由段為fruits時(shí)才會(huì)調(diào)用的路由people否則,將返回 HTTP 404 響應(yīng):

          Route::get('/categories/{category}', function (Category $category) {
          return $category->value;
          });


          控制器路由組

          路由組改進(jìn)由Luke Downing貢獻(xiàn)。

          您現(xiàn)在可以使用該controller方法為組內(nèi)的所有路由定義公共控制器。然后,在定義路由時(shí),您只需要提供它們調(diào)用的控制器方法:

          use App\Http\Controllers\OrderController;

          Route::controller(OrderController::class)->group(function () {
          Route::get('/orders/{id}', 'show');
          Route::post('/orders', 'store');
          });

          Enum Eloquent 屬性轉(zhuǎn)換

          枚舉轉(zhuǎn)換僅適用于 PHP 8.1+。

          枚舉鑄造由Mohamed Said貢獻(xiàn)。

          Eloquent 現(xiàn)在允許您將屬性值轉(zhuǎn)換為 PHP 枚舉。為此,您可以在模型的$casts屬性數(shù)組中指定要強(qiáng)制轉(zhuǎn)換的屬性和枚舉:

          use App\Enums\ServerStatus;

          /**
          * The attributes that should be cast.
          *
          * @var array
          */

          protected $casts = [
          'status' => ServerStatus::class,
          ];

          一旦你在你的模型上定義了轉(zhuǎn)換,當(dāng)你與屬性交互時(shí),指定的屬性將自動(dòng)轉(zhuǎn)換為枚舉:

          if ($server->status == ServerStatus::provisioned) {
          $server->status = ServerStatus::ready;

          $server->save();
          }

          強(qiáng)制范圍綁定

          強(qiáng)制范圍綁定由Claudio Dekker貢獻(xiàn)。

          在之前的 Laravel 版本中,您可能希望在路由定義中限定第二個(gè) Eloquent 模型,使其必須是之前 Eloquent 模型的子模型。例如,考慮這個(gè)通過(guò) slug 為特定用戶檢索博客文章的路由定義:

          use App\Models\Post;
          use App\Models\User;

          Route::get('/users/{user}/posts/{post:slug}', function (User $user, Post $post) {
          return $post;
          });

          當(dāng)使用自定義鍵控隱式綁定作為嵌套路由參數(shù)時(shí),Laravel 將自動(dòng)限定查詢范圍以通過(guò)其父級(jí)檢索嵌套模型,使用約定來(lái)猜測(cè)父級(jí)上的關(guān)系名稱(chēng)。但是,當(dāng)自定義鍵用于子路由綁定時(shí),Laravel 之前僅支持此行為。

          但是,在 Laravel 9.x 中,即使沒(méi)有提供自定義鍵,您現(xiàn)在也可以指示 Laravel 限定“子”綁定的范圍。為此,您可以scopeBindings在定義路由時(shí)調(diào)用該方法:

          use App\Models\Post;
          use App\Models\User;

          Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) {
          return $post;
          })->scopeBindings();

          或者,您可以指示整個(gè)路由定義組使用范圍綁定:

          Route::scopeBindings()->group(function () {
          Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) {
          return $post;
          });
          });

          Laravel Breeze API & Next.js

          Laravel Breeze API 腳手架和 Next.js 入門(mén)套件由Taylor OtwellMiguel Piedrafita貢獻(xiàn)。

          Laravel Breeze 入門(mén)套件已經(jīng)獲得了“API”腳手架模式和免費(fèi)的 Next.js?前端實(shí)現(xiàn)這個(gè)初學(xué)者工具包腳手架可用于快速啟動(dòng)用作后端的 Laravel 應(yīng)用程序,以及用于 JavaScript 前端的 Laravel Sanctum 認(rèn)證 API。

          Laravel Scout 數(shù)據(jù)庫(kù)引擎

          Laravel Scout 數(shù)據(jù)庫(kù)引擎由Taylor OtwellDries Vints 貢獻(xiàn)

          如果您的應(yīng)用程序與中小型數(shù)據(jù)庫(kù)交互或工作負(fù)載較輕,您現(xiàn)在可以使用 Scout 的“數(shù)據(jù)庫(kù)”引擎,而不是 Algolia 或 MeiliSerach 等專(zhuān)用搜索服務(wù)。數(shù)據(jù)庫(kù)引擎將在過(guò)濾現(xiàn)有數(shù)據(jù)庫(kù)的結(jié)果時(shí)使用“where like”子句和全文索引,以確定查詢的適用搜索結(jié)果。

          全文索引 / Where?語(yǔ)句

          全文索引和“where”子句由Taylor OtwellDries Vints 提供

          當(dāng)使用 MySQL 或 PostgreSQL 時(shí),該fullText方法現(xiàn)在可以添加到列定義中以生成全文索引:

          $table->text('bio')->fullText();

          此外,whereFullTextandorWhereFullText方法可用于將全文“where”子句添加到具有全文索引的列的查詢中。這些方法將被 Laravel 轉(zhuǎn)換成適合底層數(shù)據(jù)庫(kù)系統(tǒng)的 SQL。例如,MATCH AGAINST將為使用 MySQL 的應(yīng)用程序生成一個(gè)子句:

          $users = DB::table('users')
          ->whereFullText('bio', 'web developer')
          ->get();

          渲染內(nèi)聯(lián) Blade 模板

          有時(shí)您可能需要將原始 Blade 模板字符串轉(zhuǎn)換為有效的 HTML。您可以使用外觀render提供的方法來(lái)完成此操作。Bladerender方法接受 Blade 模板字符串和提供給模板的可選數(shù)據(jù)數(shù)組:

          use Illuminate\Support\Facades\Blade;

          return Blade::render('Hello, {{ $name }}', ['name' => 'Julian Bashir']);

          Soketi Echo 服務(wù)器

          Soketi Echo 服務(wù)器由Alex Renoki開(kāi)發(fā)。

          雖然不是 Laravel 9.x 獨(dú)有的,但 Laravel 最近協(xié)助編寫(xiě)了 Soketi 的文檔,這是一個(gè)為 Node.js 編寫(xiě)的與Laravel Echo兼容的 Web Socket 服務(wù)器。Soketi 為那些喜歡管理自己的 Web Socket 服務(wù)器的應(yīng)用程序提供了一個(gè)很好的、開(kāi)源的替代 Pusher 和 Ably。

          Bootstrap 5 分頁(yè)視圖

          Laravel 現(xiàn)在包含使用Bootstrap 5構(gòu)建的分頁(yè)視圖。要使用這些視圖而不是默認(rèn)的 Tailwind 視圖,您可以在類(lèi)的方法中調(diào)用分頁(yè)器的useBootstrapFive方法bootApp\Providers\AppServiceProvider

          use Illuminate\Pagination\Paginator;

          /**
          * Bootstrap any application services.
          *
          * @return void
          */

          public function boot()
          {
          Paginator::useBootstrapFive();
          }

          改進(jìn)的 Ignition 異常頁(yè)面

          Spatie 創(chuàng)建的開(kāi)源異常調(diào)試頁(yè)面 Ignition 已經(jīng)從頭開(kāi)始重新設(shè)計(jì)。新的、改進(jìn)的 Ignition 隨 Laravel 9.x 一起提供,包括淺色/深色主題、可定制的“在編輯器中打開(kāi)”功能等等。

          新的助手函數(shù)

          Laravel 9.x 引入了兩個(gè)新的、方便的輔助函數(shù),你可以在自己的應(yīng)用程序中使用它們。

          str()

          str函數(shù)返回Illuminate\Support\Stringable給定字符串的新實(shí)例。這個(gè)函數(shù)等價(jià)于Str::of方法:

          $string = str('Ning')->append(' Zelin');

          // 'Ning Zelin'

          如果沒(méi)有為str函數(shù)提供參數(shù),則函數(shù)返回 的實(shí)例Illuminate\Support\Str

          $snake = str()->snake('LaravelFramework');

          // 'laravel_framework'

          to_route()

          to_route函數(shù)為給定的命名路由生成重定向 HTTP 響應(yīng),提供了一種從路由和控制器重定向到命名路由的表達(dá)方式:

          return to_route('users.show', ['user' => 1]);

          如有必要,您可以將應(yīng)分配給重定向的 HTTP 狀態(tài)代碼和任何其他響應(yīng)標(biāo)頭作為第三個(gè)和第四個(gè)參數(shù)傳遞給 to_route 方法:

          return to_route('users.show', ['user' => 1], 302, ['X-Framework' => 'Laravel']);

          server.php 文件可以刪除

          一個(gè)次要功能,但您現(xiàn)在可以server.php從項(xiàng)目中刪除該文件,它將包含在框架中。此文件僅用于php artisan serve.

          其他...

          Laravel 9 還需要幾天的時(shí)間,更多的新功能和公告將會(huì)發(fā)布。


          瀏覽 91
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  每日更新欧美韩国 | 青青草在线激情视频 | 免费国产黄片在线看 | 国产日韩+欧美在线观看 | 91青娱乐在线视频 |