New Features in Laravel 5.4

Đã có quá nhiều bài viết nói về Laravel là gì? Hướng dẫn cài đặt Laravel, Các sử dụng Laravel, ... Nên trong bài này tôi không nhắc lại những điều trên nữa. Thay vào đó, tôi tập trung nhiên cứu vào một điều mới lạ hơn. Đó là, những tính năng nổi bật của version Laravel chuẩn bị được công bố (Laravel 5.4, phiên bản mới nhất hiện nay là Laravel 5.3)

Route improvements

Trong phiên bản Laravel 5.4, Hai cải thiện mới sẽ đến với router của bạn: router cache tốt hơn cho những ứng dụng lớn và dễ dàng khai báo một router

  • Cải thiện Router cache: Cải thiện này cho phép kết nối các router trong ứng dụng lớn. Với cải thiện này cho phép ứng dụng của bạn có thể định nghĩa tới hơn một nghìn router

  • Dễ dàng định nghĩa router: Trong các version Laravel trước, nếu bạn muộn khai báo một tên router hoặc một middleware, cần phải làm như sau:

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

Với version 5.4, bạn có thể khai báo như sau:

    // Khai báo một router
    Route::name('profile')->get('user/{id}/profile', function ($id) {
        // some closure action...
    });

    // Khai báo một router và middleware

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

    // Khai báo một middleware với route prefix và group

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

    // Khai báo một middleware tới một controller

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

JSON Based Language Files

Vấn đề đa ngôn ngữ và việc chuyển đổi chúng cũng sẽ được cải thiện trong version mới này.

Trong những version trước, để chuyển đổi ngôn ngữ, chúng ta dùng helper trans() hay trans_choice()

    trans('auth.verification_number_instructions')

Sau đó, bạn cần thêm bản dịch cho key đó trong mọi ngôn ngữ mà project của bạn hỗ trợ. Ví dụ với tiếng Anh, trong file resources/lang/en/auth.php cần có:

    <?php

    return [
        'auth.verification_number_instructions' => 'Please enter your 4-digit verification number:'
    ];

Với một project nhỏ và vừa, số lượng key này vẫn còn giới hạn cho nên nó không khó để quản lý chúng. Tuy nhiên, với một project lớn, lương key tăng lên nhiều lần, lúc đó việc nghĩ ra một key dễ hiểu và dễ nhớ thật không dễ dàng chút nào. Để giải quyết vấn đề này, Laravel 5.4 chuyển sang sử dụng một helper function mới.

__("Please enter your name:")

function mới này sẽ tìm kiếm file resources/lang/en.json, giải mã nó và mang lại giá trị tương ứng dựa trên ngôn ngữ mà ứng đụng đang cho phép. File Json có dạng:

{"Please enter your name:": "Fram gia Viet Nam"}

Hàm này cho phép người lập trình sử dụng những dòng ngôn ngữ đơn giản trong quá trình phát triển ứng dụng.

Để truyên tham số vào hàm __() , làm như sau:

__(
    "Hello :name, you have :unread messages",
    ['name' => $user->name, 'unread' => $notifications->count]
)

Điều tuyệt với ở đây là việc thay thế tham số vẫn sẽ được thực hiện ngay cả khi dòng ngôn ngữ không được tìm thấy. Có nghĩa là bạn thậm chí không cần xây dựng một tập tin dịch cho ứng dụng của bạn bằng ngôn ngữ chính. Vì vậy trong ví dụ trên, ngay cả khi không có file en.json, kết quả trả về của câu lệnh trên sẽ có dạng:

Hello Canh dep trai, you have 23 messages.

Một cải tiến khác là Laravel 5.4 cho phéo sử dụng @trans() trong file blade. Sử dụng như sau:

@trans(['name' => $user->name, 'unread' => $notifications->count])
    Hello :name, you have :unread messages.
@endtrans

You Can Use Markdown in Your Emails

Laravel 5.3 đã đưa ra hai cải tiến cho Emails, đó là Mailables và Notifications, cho phép bạn gửi message giống nhau thông qua Emails, SMS, ...

Xây dựng dựa trên những cải tiến của 5.3, Laravel 5.4 tiến tới thêm vào Markdown system cho việc tạo một template Email.

  • Email Components: Bao gồm các components sau đây:

    • button
    • footer
    • header
    • layout
    • message
    • panel
    • promotion
    • subcopy
    • table

Bạn có thể sử dụng trong Email template như sau:

@component('mail::button', ['url' => $actionUrl, 'color' => $color])
{{ $actionText }}
@endcomponent
  • Using Markdown for Mailables: Để sử dụng Markdown, bạn chỉ cần khai báo
return $this->markdown('emails.thanks');

Lúc này, trong email thanks bạn có thể sử dụng đươc Markdown.

Higher Order Messaging for Collections

Thật khó để định nghĩa cho mục này. Cách tốt nhất là theo dõi qua những ví dụ sau đây. Giả sử bạn có một collection, bạn cần thao tác một hoạt động trên từng item của collection đó.

Trong các version Laravel trước đây.

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

Với version 5.4, công việc trở nên đơn giản hơn rất nhiều.

    $invoices->each->pay();

Một ví dụ khác,

    $employees->reject(function($employee) {
        return $employee->retired;
    })->each(function($employee){
        $employee->sendPayment();
    });

Với 5.4,

    $employees->reject->retired->each->sendPayment();

Trên đây là một vài tính năng mới của bản 5.4. Laravel 5.4 sẽ được releae vào 01/2017. Hãy cùng chờ đợi và đón xem những tính năng thú vị mới hơn nữa nhé. ^^