Chào các bạn, bài viết về update Laravel 5.5 của mình còn chưa kịp ráo mực thì hôm nay đã tiếp tục bài viết về phiên bản 5.6. Căn bản cũng vì bài 5.5 của mình viết chậm quá 😐

Lần này tranh thủ phiên bản 5.6 mới release được vài bữa nên mình cập nhật vào series luôn 😄 Bản cập nhật này sẽ không lớn như 5.5 tuy nhiên cũng có rất nhiều điểm đáng chú ý và hiệu quả nếu bạn bắt đầu làm việc với Laravel ngay từ bản 5.6 này.

Blade Component Aliases

Bạn có thể định nghĩa một alias cho component con để sử dụng thay thế cho việc dùng trước đây kiểu @component bằng cách:

Blade::component('app.components.alert', 'alert');

Sau đó có thể gọi lại bằng cách:

@alert(['type' => 'danger'])
    @slot('title')
        Lỗi!
    @endslot

    Bạn không có quyền...!
@endalert

{{-- hoặc theo cách cũ --}}
@component('app.components.alert');
 ...
@endcomponent

Ngoài ra, trước đây ở form request ta cần tạo thêm hidden input cho CRFS Token và HTTP method:

<form>
  {{ csrf_field() }}
  {{ method_field('PUT') }}
  <!-- ... -->
</form>

Ở 5.6, Laravel cung cấp chỉ thị mới cho việc sử dụng ngắn gọn hơn và dễ nhớ hơn:

<form>
    @method('put')
    @csrf
    <!-- ... -->
</form>

Dynamic Rate Limiting

Trước phiên bản 5.6, để giới hạn lượng truy cập trong khoảng thời gian nhất định ta sẽ phải hard code số lượng request tối đa bằng cách:

Route::middleware('auth:api', 'throttle:60,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

Tuy nhiên, bây giờ bạn có thể thêm trường rate_limit vào model nào mà bạn muốn giới hạn request, khi đó việc giới hạn sẽ chuyên nghiệp hơn 😄

Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

Logging Improvements

Laravel 5.6 mang đến những cải tiến lớn cho hệ thống Logging.
Tất cả các config cho logging được chuyển sang file config/logging.php. Bây giờ bạn có thể build một logging stacks để có thể tùy chỉnh gửi log tới nhiều handler khác nhau .
Ví dụ , bạn có thể gửi tất cả log có level debug tới system log trong khi error log sẽ được gửi sang Slack để có thể nhanh chóng xử lý.

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['syslog', 'slack'],
    ],

    'syslog' => [
        'driver' => 'syslog',
        'level' => 'debug',
    ],

    'slack' => [
        'driver' => 'slack',
        'url' => env('LOG_SLACK_WEBHOOK_URL'),
        'username' => 'Laravel Log',
        'emoji' => ':boom:',
        'level' => 'critical',
    ],
],

Các bạn có thể đọc thêm docs của Laravel tại đây.

Single Server Task Scheduling

Những task theo lịch cho app Laravel thường chạy trên nhiều server. Giả sử task đã deploy lên 2 web server, 2 worker server, vậy là 4 server @@
Ở phiên bản này, bạn có thể đặt lịch cho nó chạy trên 1 server duy nhất bằng cách:

$schedule->command('report:generate')
         ->fridays()
         ->at('17:00')
         ->onOneServer();

Server đầu tiên xử lý task sẽ khóa để ngăn chặn các server khác thực hiện lại.
Chú ý: ứng dụng của bạn phải sử dụng cache driver là memcached hoặc redis làm mặc định, tất cả các server phải giao tiếp với cùng một cache server trung tâm.

Hỗ trợ Argon2 Password Hashing

Từ phiên bản Laravel 5.6 và PHP 7.2 trở lên, ngoài bcrypt và scrypt chúng ta có thể lựa chọn mã hoá password bằng argon.

Bạn có thể cấu hình cho bộ mã hoá mặc định ở file config/hashing.php.

Eloquent Date Casting

Ở 5.6 hỗ trợ cách format date đơn giản hơn cho model attributes qua $casts:

protected $casts = [
  'date_enrolled' => 'date:Y-m-d',
  'date_evicted' => 'datetime:Y-m-d H:00',
];


date_enrolled: 2005-02-19
date_evicted: 2018-02-20 8:30

Commands

API controller

Bạn có thể tạo resource controller viết API (không có method create, edit) bằng cách thêm flag --api vào câu lệnh tạo controller:

php artisan make:controller APIController --api
Lệnh command optimize bị loại bỏ

php artisan optimize
Ở phiên bản 5.5, Laravel được cải tiến và tối ưu bộ nhớ đệm, nên việc sử dụng lệnh này không còn cần thiết nữa. Và ở phiên bản 5.6 câu lệnh này đã bị loại bỏ.

Bootstrap 4

Bootstrap 4 bắt đầu được hỗ trợ mặc định cho tất cả những framework front-end như Vue hay React…

Kết

Trên đây là tổng hợp của mình về những điều liên quan đến kiến thức hay dùng của các bản trước được đụng chạm vào bản này hay một số cập nhật nhỏ mà mình cảm thấy hữu ích. Mong chúng giúp đỡ được cho các bạn. Hẹn gặp lại ở một bài khác.
Cám ơn các bạn đã theo dõi.