Những điểm mới trong laravel 5.4

Ở bài viết này, mình sẽ đề cập đến những tính năng mới của laravel ở phiên bản 5.4. Như các bạn đã biết, vài tháng trước, Laravel 5.3 đã released. Ở phiên bản này, chúng ta đã biết các tính năng như Mailables giúp cho việc gửi mail dễ dàng hơn v.v... Tuy nhiên ở phiên bản 5.4 chúng ta có các thay đổi khá là hay ho mà mình sẽ giới thiệu.

New Middlewares

Với việc phát hành của phiên bản 5.4, chúng ta sẽ có thêm hai middleware mới đó là :

TRIM STRINGS MIDDLEWARE CONVERT EMPTY STRINGS TO NULL

Đối với TRIM STRINGS MIDDLEWARE .Giả sử bạn có một form email. Ở những phiên bản trước, nếu ai đó nhập thêm vào một khoảng trắng, kết quả sẽ như sau : dd(request->get('email')); // '[email protected] ' Tuy nhiên, ở phiên bản này bạn không cần phải lo về vấn đề đó nữa. Nó trở nên dễ dàng hơn rất nhiều. Bạn chỉ việc thêm vào App/Kernel.php

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\TrimStrings::class,

Chúng ta sẽ có được kết quả như thế này dd(request->get('email')); // '[email protected]' Còn với middleware CONVERT EMPTY STRINGS TO NULL sẽ tự động convert các ký tự '' thành null

Higher order messages

Hãy tưởng tượng chúng ta có một collection các bài đăng blog và chúng ta muốn thực hiện một thao tác trên mỗi mục trong bộ sưu tập. Thông thường, chúng ta sẽ làm việc này.

// Lặp qua tất cả các bài đăng và lên lịch để chia sẻ với Twitter
$posts->each (function ($ post) {
     Return $post->schedule(TWITTER);
});

với High order messages, chúng ta có thể đơn giản hóa dòng code này thành :

$posts->each->schedule(TWITTER);

Và điều này khiến chúng ta có thể muốn code thêm một chút nữa chẳng hạn như

/**
* Duyệt qua tất cả các post và bỏ qua các post đã lưu
* Sau đó lên lịch cho từng post còn lại
*/
$posts->reject(function ($post) {
    return $post->archived;
})->each(function ($post) {
    return $post->schedule(TWITTER);
});

Tuy nhiên, chúng ta có thể code lại ở phiên bản 5.4 này như sau

$posts->reject->archived->each->schedule(TWITTER);

Đơn giản hơn rất nhiều phải không các bạn.

Fluent Routing

Route facade in Laravel is now fluent. Ở phiên bản trước, nếu chúng ta muốn đặt tên cho route, chúng ta thường làm như thế này :

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

Bây giờ chúng ta có thể viết như thế này

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

Đăng ký route name và middleware

Route::name('users.index')->middleware('auth')->get('users', function () {

});

Đăng ký middleware với route prefix và group

Route::middleware('auth')->prefix('api')->group(function () {
   
});

Đăng ký middleware với resource controller

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

Fix: Specified key was too long error

Laravel 5.4 đã thay đổi các ký tự mặc dịnh, và nó hiện giờ là utf8mb4 bao gồm hỗ trợ lưu trữ emojis. Điều này chỉ ảnh hưởng đến các ứng dụng mới và miễn là bạn đang chạy MySQL v5.7.7 trở lên bạn không cần phải làm bất cứ điều gì. Đối với những người chạy MariaDB hoặc các phiên bản MySQL cũ hơn, bạn có thể gặp lỗi này khi chạy php artisan migrate:

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))

[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

Như đã nêu trong Migrations guide để khắc phục tất cả những gì bạn phải làm là chỉnh sửa file AppServiceProvider.php và thiết lập chiều dài chuỗi mặc định:

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

Trên đây là những điểm thay đổi của Laravel 5.4, ở phần sau mình sẽ tiếp tục giới thiệu các bạn về phần còn lại. Nguồn tham khảo : https://laracasts.com/series/whats-new-in-laravel-5-4


All Rights Reserved