Laravel 7發(fā)行說明

      網友投稿 909 2022-05-29

      版本化方案

      Laravel及官方發(fā)布的包皆遵循?語義版本化。主要框架版本每六個月發(fā)布一次 (~2月和~8月),而次要和補丁版本可能每周發(fā)布一次。次要版本和補丁?決不?包含非兼容性更改。

      引入 Laravel 框架或其組件時,應始終使用版本約束,如?^7.0,因為 Laravel 的主要版本確實包含非兼容性更改。我們會努力確保您可以在一天或更短的時間內更新到最新版本。

      支持政策

      對于 LTS 版本,例如 Laravel 6,提供了 2 年的錯誤修復和3年的安全修復。這些版本提供了最長的支持和維護窗口。對于一般的發(fā)行版本,只提供了 6 個月的錯誤修復和 1 年的安全修復。對于包括 Lumen 在內的所有其他版本,只有最新版本才會修復錯誤。此外,請查閱?Laravel 支持的?數(shù)據(jù)庫版本。

      Laravel 7

      Laravel 7 通過引入 Laravel Sanctum,路由速度改進,自定義 Eloquent 強制轉換(casts), Blade 組件標簽,流暢的字符串操作,開發(fā)人員專用的 HTTP 客戶端, 第一方 CORS 支持, 路由模型綁定作用域改進, 存根自定義, 數(shù)據(jù)庫隊列改進, 多郵箱驅動, 查詢時間強制轉換(casts),新的?artisan test?命令,以及各種其他錯誤修復和可用性改進,對 Laravel 6.x 繼續(xù)進行了改善。

      Laravel Sanctum

      Laravel Sanctum 由?Taylor Otwell建造。

      Laravel Sanctum 為 SPA (單頁應用程序),移動應用程序和基于令牌的簡單 API 提供了輕巧的身份驗證系統(tǒng)。 Sanctum 允許應用程序的每個用戶生成多個 API 令牌。 這些令牌可以被授予能力/作用域,用于指定允許令牌執(zhí)行哪些動作。

      有關 Laravel Sanctum 的更多信息, 請查看?Sanctum 文檔。

      自定義 Eloquent 類型轉換

      自定義 Eloquent 類型轉換由?Taylor Otwell?開發(fā)貢獻.

      Laravel 內置了多種常用的類型轉換。但是,用戶偶爾會需要將數(shù)據(jù)轉換成自定義類型。現(xiàn)在,該需求可以通過定義一個實現(xiàn)?CastsAttributes?接口的類來完成

      實現(xiàn)了該接口的類必須事先定義一個?get?和?set?方法。?get?方法負責將從數(shù)據(jù)庫中獲取的原始數(shù)據(jù)轉換成對應的類型,而?set?方法則是將數(shù)據(jù)轉換成對應的數(shù)據(jù)庫類型以便存入數(shù)據(jù)庫中。舉個例子,下面我們將內置的?json?類型轉換以自定義類型轉換的形式重新實現(xiàn)一遍:

      namespace App\Casts;

      use Illuminate\Contracts\Database\Eloquent\CastsAttributes;

      class Json implements CastsAttributes

      {

      /**

      * 將取出的數(shù)據(jù)進行轉換

      *

      * @param \Illuminate\Database\Eloquent\Model $model

      * @param string $key

      * @param mixed $value

      * @param array $attributes

      * @return array

      */

      public function get($model, $key, $value, $attributes)

      {

      return json_decode($value, true);

      }

      /**

      * 轉換成將要進行存儲的值

      *

      * @param \Illuminate\Database\Eloquent\Model $model

      * @param string $key

      * @param array $value

      * @param array $attributes

      * @return string

      */

      public function set($model, $key, $value, $attributes)

      {

      return json_encode($value);

      }

      }

      定義好自定義類型轉換后,可以使用其類名稱將其附加到模型屬性:

      namespace App;

      use App\Casts\Json;

      use Illuminate\Database\Eloquent\Model;

      class User extends Model

      {

      /**

      * 這個屬性應該被轉化為原生類型

      *

      * @var array

      */

      protected $casts = [

      'options' => Json::class,

      ];

      }

      要學習如何實現(xiàn)自定義 Eloquent 類型轉換,包括轉換成特定值對象的類型轉換,請參照?Eloquent documentation。

      Blade 組件標簽和變化

      Blade 組件標簽貢獻人員有?Spatie,?Marcel Pociot,?Caleb Porzio,?Dries Vints, 和?Taylor Otwell.

      {小提示} Blade 組件已經大刀闊斧修改,其中變化有允許基于標簽的渲染,參數(shù)管理,組件類,內聯(lián)視圖組件眾多變化。經過修改的 Blade 組件如此之多,請從這里?Blade文檔來學習這些新特性。

      總結為一句,現(xiàn)在的一個組件能從指定的類獲取數(shù)據(jù)。所有的公開屬性和方法都清晰地定義在組件類里,會自動組裝成組件視圖。任何附加的 HTML 屬性都指定于一個可以被管理的自動包含$attribute?變量的組件,它是一個屬性包的實例。

      下面有個例子,我們會假設一個?App\View\Components\Alert?組件定義是這樣的:

      namespace App\View\Components;

      use Illuminate\View\Component;

      class Alert extends Component

      {

      /**

      * 提醒類型

      *

      * @var string

      */

      public $type;

      /**

      * 創(chuàng)建組件實例.

      *

      * @param string $type

      * @return void

      */

      public function __construct($type)

      {

      $this->type = $type;

      }

      /**

      *獲取給提醒類型的類

      *

      * @return string

      */

      public function classForType()

      {

      return $this->type == 'danger' ? 'alert-danger' : 'alert-warning';

      }

      /**

      * 獲取渲染組件的視圖/內容

      *

      * @return \Illuminate\View\View|string

      */

      public function render()

      {

      return view('components.alert');

      }

      }

      并且假設 Blade 組件模板定義是這樣的:

      {{ $heading }}

      {{ $slot }}

      組件可以被渲染在另一個使用組件標簽的 Blade 視圖:

      Alert content...

      Default slot content...

      如前所述,在大改之后的 Laravel7 當中這是一個非常小又普通的一個功能,而且還沒有演示匿名組件,內聯(lián)視圖組件和各種各樣的其他特性。請從這里Blade文檔來學習這些新特性

      {注意} 以前的 Blade 組件?@component?語法沒有被移除。

      HTTP 客戶端

      HTTP 客戶端是 Guzzle 的一個封裝,由?Adam Wathan,Jason McCreary,和?Taylor Otwell?提供。

      Laravel 現(xiàn)在提供一套圍繞 Guzzle HTTP 客戶端](http://docs.guzzlephp.org/en/stable/) 構建的精簡且高效的 API,允許你快速向其它 web 應用發(fā)起 HTTP 請求。Laravel 基于 Guzzle 的封裝專注于最常見的用例和最棒的開發(fā)人員體驗。例如,客戶端發(fā)起帶 JSON 數(shù)據(jù)的?POST?請求變得輕而易舉:

      use Illuminate\Support\Facades\Http;

      $response = Http::withHeaders([

      'X-First' => 'foo'

      'X-Second' => 'bar'

      ])->post('http://test.com/users', [

      'name' => 'Taylor',

      ]);

      return $response['id'];

      此外,HTTP 客戶端還提供了令人驚嘆且易于使用的測試功能:

      Http::fake([

      // Stub a JSON response for GitHub endpoints...

      'github.com/*' => Http::response(['foo' => 'bar'], 200, ['Headers']),

      // Stub a string response for Google endpoints...

      'google.com/*' => Http::response('Hello World', 200, ['Headers']),

      // Stub a series of responses for Facebook endpoints...

      'facebook.com/*' => Http::sequence()

      ->push('Hello World', 200)

      ->push(['foo' => 'bar'], 200)

      ->pushStatus(404),

      ]);

      了解更多 HTTP 客戶端的特性,請查閱?HTTP 客戶端文檔.

      流暢的字符串操作

      流暢的字符串操作由?Taylor Otwell?開發(fā)貢獻?。

      你可能對 Laravel 已有的?Illuminate\Support\Str?這個類比較熟悉,它提供了各種有用的字符串操作函數(shù)。基于這些函數(shù), Laravel 7 現(xiàn)在提供了一個更加面向對象的、更加流暢的字符串操作庫。你可以使用?Str::of?方法創(chuàng)建一個?Illuminate\Support\Stringable?對象。 然后可以使用該對象的各種方法去操作字符串:

      return (string) Str::of(' Laravel Framework 6.x ')

      ->trim()

      ->replace('6.x', '7.x')

      ->slug();

      有關流暢的字符串操作可用方法的更多信息, 請查閱完整文檔。

      路由模型綁定優(yōu)化

      路由模型綁定優(yōu)化由?Taylor Otwell?開發(fā)貢獻?。

      自定義鍵名

      有時你可能希望使用?id?以外的字段來解析 Eloquent 模型。 為此, Laravel 7 允許你在路由參數(shù)中指定某個字段:

      Route::get('api/posts/{post:slug}', function (App\Post $post) {

      return $post;

      });

      隱式綁定約束

      有時,當在路由中隱式綁定多個 Eloquent 模型時,可能希望對第二個 Eloquent 模型進行約束,使其必須是第一個 Eloquent 模型的子類。例如,考慮這種情況,該情況是通過 Slug 為特定用戶查找博客文章的:

      use App\Post;

      use App\User;

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

      return $post;

      });

      當使用自定義鍵隱式綁定作為嵌套的路由參數(shù)時,Laravel 7 將自動確定查詢范圍,以使用約定猜測其父級上的關系名稱,以其父級檢索嵌套模型。在這種情況下,將假定?User?模型關聯(lián)了名為?posts(路由參數(shù)名稱的復數(shù)) 的關系,該關系可用于檢索?Post?模型。

      有關路由模型綁定的更多信息,請查閱路由文檔。

      多郵件驅動程序

      多郵件驅動程序支持由?Taylor Otwell?貢獻。

      Laravel 7 允許為單個應用配置多個郵件驅動。在?mail?配置文件中的每個郵件驅動都擁有它們自己的配置以及自己獨特的 「transport」,這允許你的應用使用不同的郵件服務來發(fā)送某些郵件。例如,你的應用可以使用 Postmark 發(fā)送批量郵件,使用 Amazon SES 發(fā)送公務郵件。

      默認情況下,Laravel 將使用?mail?配置文件中的?default?選項指定的郵件驅動作為郵件驅動。然而,你可以通過?mailer?方法來使用特定的郵件驅動來發(fā)送郵件。

      Laravel 7發(fā)行說明

      Mail::mailer('postmark')

      ->to($request->user())

      ->send(new OrderShipped($order));

      路由緩存速度改進

      路由緩存速度改進由上游的?Symfony?的貢獻者和?Dries Vints?貢獻

      Laravel 7 提供了一種新的方法,用于匹配使用 Artisan 命令?route:cache?緩存的已編譯緩存路由。在大型應用程序(例如,具有800條或更多路由的應用程序)上,這些改進可以使簡單的「Hello World」基準測試每秒的請求速度?提高2倍?,而無需更改應用程序。

      CORS 支持

      CORS 支持由?Barry vd. Heuvel?貢獻

      Laravel 7 通過集成由 Barry vd. Heuvel 編寫的受歡迎的 Laravel CORS 軟件包,為配置跨域資源共享(CORS)?OPTIONS?請求響應提供了官方支持,?默認的 Laravel 應用程序框架?中包含一個新的?cors?配置。

      有關 Laravel 7.x 中的 CORS 支持的更多信息,請查閱CORS文檔。

      查詢時類型轉換

      查詢時類型轉換由?Matt Barlow?開發(fā)貢獻.

      有時候需要在查詢執(zhí)行過程中對特定屬性進行類型轉換,例如需要從數(shù)據(jù)庫表中獲取數(shù)據(jù)的時候。舉個例子,請參考以下查詢:

      use App\Post;

      use App\User;

      $users = User::select([

      'users.*',

      'last_posted_at' => Post::selectRaw('MAX(created_at)')

      ->whereColumn('user_id', 'users.id')

      ])->get();

      在該查詢獲取到的結果集中,last_posted_at?屬性將會是一個字符串。假如我們在執(zhí)行查詢時進行?date?類型轉換將更方便。你可以通過使用?withCasts?方法來完成上述操作:

      $users = User::select([

      'users.*',

      'last_posted_at' => Post::selectRaw('MAX(created_at)')

      ->whereColumn('user_id', 'users.id')

      ])->withCasts([

      'last_posted_at' => 'date'

      ])->get();

      MySQL 8+ 數(shù)據(jù)庫隊列改進

      MySQL 數(shù)據(jù)庫隊列改進由?Mohamed Said?開發(fā)貢獻.

      在先前版本的 Laravel 中,?database?隊列的健壯性被認為無法滿足生產環(huán)境的需求。但是,Laravel 7 針對使用基于 MySQL 8+ 數(shù)據(jù)庫隊列的應用進行了改進。通過使用?FOR UPDATE SKIP LOCKED?語句進行 SQL 的優(yōu)化,database?隊列驅動可以安全地用于生產環(huán)境。

      Artisan?test?命令

      test?命令由?Nuno Maduro?貢獻

      除了?phpunit命令之外,現(xiàn)在可以使用?test?Artisan 命令來運行測試。 Artisan 測試運行器提供了漂亮的控制臺,以及有關當前正在運行的測試的更多信息。 此外,運行器將在第一次測試失敗時自動停止:

      php artisan test

      可以傳遞給?phpunit?命令的任何參數(shù)也可以傳遞給 Artisan?test?命令:

      php artisan test --group=feature

      Markdown 郵件模板改進

      Markdown 郵件模板改進由?Taylor Otwell?貢獻

      默認的Markdown郵件模板已基于Tailwind CSS調色板做出全新、更現(xiàn)代的設計。 當然,可以根據(jù)您的應用程序的需求來發(fā)布和定制此模板:

      有關 Markdown 郵件的更多信息,請查看郵件發(fā)送.

      自定義樁代碼

      自定義樁代碼由?Taylor Otwell貢獻

      Artisan 控制臺的 make 命令用于創(chuàng)建各種類,例如控制器,任務,遷移和測試。 這些類是根據(jù)輸入填充值使用「樁代碼」生成文件的。 但是,有時可能希望對 Artisan 生成的文件進行小的更改。 為此,Laravel 7提供了?stub:publish?命令來發(fā)布最常見的自定義樁代碼:

      php artisan stub:publish

      發(fā)布的樁代碼將位于應用程序根目錄中的?stubs?目錄中。 當使用 Artisan 的 make 命令生成它們的相應類時,對這些樁代碼所做的任何更改都會反映出來。

      隊列maxExceptions配置

      maxExceptions屬性由Mohamed Said提交貢獻.

      有時可能希望指定可以嘗試多次的任務,但是如果重試是由給定數(shù)量的異常觸發(fā)的,則該任務將失敗。在Laravel7中,可以在任務類上定義?maxExceptions?屬性:

      namespace App\Jobs;

      class ProcessPodcast implements ShouldQueue

      {

      /**

      * 任務可以被重試的次數(shù)。

      *

      * @var int

      */

      public $tries = 25;

      /**

      * 失敗之前允許拋出異常的最大次數(shù)。

      *

      * @var int

      */

      public $maxExceptions = 3;

      /**

      * 執(zhí)行任務。

      *

      * @return void

      */

      public function handle()

      {

      Redis::throttle('key')->allow(10)->every(60)->then(function () {

      // 獲取鎖,處理博客進程...

      }, function () {

      // 無法獲取鎖...

      return $this->release(10);

      });

      }

      }

      在此示例中,如果應用程序無法獲得 Redis 鎖,則該任務將釋放十秒鐘,并將繼續(xù)重試 25 次。但是,如果任務拋出三個未處理的異常,則該任務將失敗。

      Laravel NAT

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【精選單品】算力共享——以更經濟的方式實現(xiàn)全通道目標識別,抓拍攝像機秒變識別攝像機
      下一篇:使用QOpenGLWidget(調用GPU)渲染QImage加載的圖片
      相關文章
      亚洲综合婷婷久久| 无码久久精品国产亚洲Av影片| 亚洲精品无码久久久久去q| 国产成人亚洲精品电影| 亚洲精品二三区伊人久久| 亚洲午夜精品一区二区| 亚洲成AV人在线播放无码| 精品国产综合成人亚洲区| 亚洲精品无码精品mV在线观看| 国产亚洲精品AA片在线观看不加载| 亚洲午夜爱爱香蕉片| 亚洲男人天堂2020| 久久精品亚洲乱码伦伦中文| 亚洲真人日本在线| 亚洲永久精品ww47| 国产成人亚洲综合色影视| 亚洲成a人片在线观看无码| 亚洲成a人片77777老司机| 亚洲精品国产成人专区| 337p日本欧洲亚洲大胆艺术| 亚洲日韩中文字幕| 亚洲av成人一区二区三区| 亚洲精品国产国语| 亚洲av永久无码一区二区三区 | 亚洲AV成人无码久久精品老人| 无码久久精品国产亚洲Av影片| 亚洲视频在线观看视频| 亚洲同性男gay网站在线观看| 精品日韩99亚洲的在线发布| 亚洲性色AV日韩在线观看| MM1313亚洲精品无码久久| 亚洲国产精品激情在线观看| 久久亚洲AV无码西西人体| 久久精品国产亚洲av四虎| 亚洲国产精品久久网午夜| 亚洲一区二区无码偷拍| 自拍偷自拍亚洲精品播放| 亚洲日韩中文字幕日韩在线| 亚洲午夜福利717| 亚洲视频免费在线观看| 亚洲二区在线视频|