1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        看看 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 組件來實(shí)現(xiàn)框架內(nèi)的許多功能。Symfony 6.0 將于 11 月發(fā)布。出于這個(gè)原因,我們選擇將 Laravel 9.0 的發(fā)布推遲到 2022
        年。通過推遲發(fā)布,我們可以將底層的 Symfony 組件升級到 Symfony 6.0,而不必被迫等到 2022 年 9 月才能執(zhí)行此升級。此外,這更好地為我們未來的發(fā)布做好了準(zhǔn)備,因?yàn)槲覀兊哪甓劝l(fā)布總是在 Symfony 發(fā)布后兩個(gè)月發(fā)布。

        這也將推動(dòng)未來的主要版本,以下是未來的時(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 中很長時(shí)間了,有時(shí)會(huì)出現(xiàn)的一個(gè)問題是,如果您定義了龐大而復(fù)雜的路由,則嘗試在控制臺(tái)中查看它們可能會(huì)變得混亂。多虧了Nuno Maduro 的 PR,讓路由列表有了新的設(shè)計(jì)。

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

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

        匿名的數(shù)據(jù)庫遷移類

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

        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é)。


        對于在 IDE 中依賴類型提示進(jìn)行靜態(tài)分析、重構(gòu)或代碼完成的開發(fā)人員來說,缺乏共享接口或 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以在類內(nèi)部使用str_contains(),str_starts_with()str_ends_with()函數(shù)。\Illuminate\Support\Str


        從 SwiftMailer 到 Symfony Mailer

        Symfony Mailer 的支持由Dries Vints、James BrooksJulius Kiekbusch 提供。

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

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

        Flysystem 3.x

        Flysystem 3.x 支持由Dries Vints 提供。

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

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

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

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

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

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

        但是,在 Laravel 9.x 中,您可以使用單個(gè)非前綴方法通過類型提示返回類型來定義訪問器和修改器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,
        );
        }

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

        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 引入了對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è)通過 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ān)系名稱。但是,當(dāng)自定義鍵用于子路由綁定時(shí),Laravel 之前僅支持此行為。

        但是,在 Laravel 9.x 中,即使沒有提供自定義鍵,您現(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 入門套件由Taylor OtwellMiguel Piedrafita貢獻(xiàn)。

        Laravel Breeze 入門套件已經(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ù)庫引擎

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

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

        全文索引 / Where?語句

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

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

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

        此外,whereFullTextandorWhereFullText方法可用于將全文“where”子句添加到具有全文索引的列的查詢中。這些方法將被 Laravel 轉(zhuǎn)換成適合底層數(shù)據(jù)庫系統(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提供的方法來完成此操作。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開發(fā)。

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

        Bootstrap 5 分頁視圖

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

        use Illuminate\Pagination\Paginator;

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

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

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

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

        新的助手函數(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'

        如果沒有為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)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            美国式禁忌14在线 | 天天日天天撸 | 51妺妺嘿嘿午夜成人A片 | 国产精品v欧美精品v日韩 | 人人天天操 | 内射毛片 | 欧美成人做爰www免费看视频网站 | 亚洲色女一区 | 三个中国女裸体杂技视频 | 久操视频免费在线 |