Laravel 5.4 正式發布

轉自 Laravel 資訊:https://laravel-china.org/topics/3713

Laravel Dusk

當編寫接口測試時,Laravel 提供了一組有用的幫助方法,用來方便地單擊鏈接,填充表單文件或提交表單。Laravel 使用 Symfony BrowserKit 組件來模擬 Web 瀏覽器的行為。但是,如果應用程序使用 JavaScript 和 AJAX 來加載頁面,就沒 BrowserKit 啥事了。

Laravel 5.4 將引入 Laravel Dusk 這一新工具,來解決這個問題。

Dusk 能模擬瀏覽器的運行環境。它的目的是提供正確的方式進行頁面交互測試,所以可以使用 Dusk 去點擊按鈕或者鏈接、填寫表單、甚至拖放。

Dusk 利用 ChromeDriver 和 Facebook PHP-webdriver 進行接口測試。它作用于任何 Selenium 瀏覽器,而它自帶的 ChromeDriver 默認情況下會根據你安裝的方式(JDK 或 Selenium)進行保存。這使得 Dusk 很容易使用,而不需要經歷設置 Selenium 和每次啟動服務器這些艱難的過程。此外,Taylor Otwell 提到 Dusk 測試運行比 Selenium 更快。

@JokerLinly 的文章 Laravel Dusk 又是啥?反正 Laravel 5.4 又能更好玩了

Laravel Mix

Laravel Mix 是 Elixir 的升級版,全新的 Mix 使用 Webpack 構建,而不是之前的 Gulp。此次因底層架構改變較大而重命名。

除非你對 Elixir 做了很多自定義設置,否則遷移應該不用費很大的勁,可以查看 Laracasts 對升級工具的介紹。

Blade Components 和 Slots

Laravel Blade 在 5.4 中加入 Components 和 Slots 兩個新的特性。 這個功能受到 Vue.js 的啟發,能夠將 HTML 元素簡化為可重用區域。舉個例子,假設你想在主頁上添加一個 alert 框。

// alert.blade.php
<div class="alert">
    {{ $slot }}
</div>

在模板里你可以這樣加載:

@component('inc.alert')
    This is the alert message here.
@endcomponent

@JokerLinly 的文章 Laravel 在 5.4 中為 Blade 模板引擎增加新成員 —— Components & Slots

支持 Markdown 語法的 Emails

Laravel 5.3 引進了兩個與電子郵件有關的新功能 Mailables 和 Notifications,能夠讓你通過電子郵件、短信和其他渠道發送相同的消息。

建立在這些改進的基礎之上,Laravel 5.4 將引入一個全新的 Markdown 系統來創建電子郵件模板。

此功能實現了 Parsedown 解析器以及 Markdown Extra,這樣就可以在郵件中發送表格了。

@component('mail:message')

# Thank You

Thank you for purchasing from our store. 

@component('mail::button', ['url' => $actionUrl, 'color' => $color])
{{ $actionText }}
@endcomponent

@endcomponent

@JokerLinly 的文章 在 Laravel 5.4 中你將可以使用 Markdown 語法書寫郵件

自動化 Facades

現在你可以實時地使用 Facade 對任何類進行加載。下面是個例子:

namespace App;

class Zonda 
{
    public function zurf()
    {
        return ‘Zurfing’;
    }
}

這樣在你的控制器或者路由里:

use Facades\ {
    App\Zonda
};

Route::get('/', function () {
    return Zonda::zurf();
});

@milkmeowo 的文章 [Laravel 5.4] 新功能: 實時 Facade

路由優化

隨著 Laravel 5.4 開發 的持續,路由方面將會有兩個新的改進,為大型應用程序而生的更好路 (bu) 由 (ming) 緩 (jue) 存 (li) 和更加一目了然的路由注冊方式。

Route::name('profile')->get('user/{id}/profile', function ($id) {
    // some closure action...
});

Route::name('users.index')->middleware('auth')->get('users', function () {
    // some closure action...
});

Route::middleware('auth')->prefix('api')->group(function () {
    // register some routes...
});

Route::middleware('auth')->resource('photo', 'PhotoController');

路由緩存層的改進會讓那些定義了超過一千條路由的大型應用看到希望的曙光。

@JokerLinly 的文章 哎喲!Laravel 5.4 又改進路由啦!

集合增加高階信息傳遞(HOM)支持

對此功能最好的解釋就是使用例子。假如你相對集合里的每一個元素進行操作:

$invoices->each(function($invoice) {
    $invoice->pay();
});

以上是老的寫法,5.4 里你可以這樣寫:

$invoices->each->pay();

@milkmeowo 同學對此功能做了詳細的介紹,請前往查看 https://laravel-china.org/articles/3681

更多新功能

以下是不完全列表

  • 新增輔助函數 retry
  • 新增輔助函數 array_wrap
  • 新增默認 503 頁面
  • 整個核心加載類時重構為 ::class 調用
  • 增加密碼重置的路由命名
  • 支持 PhpRedis
  • 增加 IPv4 和 IPv6 驗證
  • date_format 的驗證現在更加準確

升級到 Laravel 5.4

官方文檔包含了升級指南。以下是你重點需要注意的。

Laravel Tinker 現在是獨立的擴展包,你需要:

composer require laravel/tinker

安裝完成后修改 config/app.php 增加:

Laravel\Tinker\TinkerServiceProvider

你原本的測試如果使用了 browser kit 的話,可以選擇升級到 Laravel Dusk 或者加載原有的擴展包:

composer require laravel/browser-kit-testing --dev

最后你需要修改 composer.json 文件把 laravel/framework 指向 5.4.*

Laravel 5.4 更多鏈接:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容