Những thay đổi của Laravel ở phiên bản 5.6
Bài đăng này đã không được cập nhật trong 6 năm
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.
All rights reserved