Laravel 5.6 đã ra mắt, có gì mới?
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ó ...
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'], ], ],
Xem thêm ở đây
Single Server Task Scheduling
Để sử dụng tính năng này, ứ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.
Nếu ứng dụng của bạn chạy trên nhiều server thì nay bạn có thể đặt lịch để chạy jod trên chỉ một server thay vì tất cả. Để thực hiện điều này bạn sử dụng method onOneServer khi đặt lịch task mới. 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.
$schedule->command('report:generate') ->fridays() ->at('17:00') ->onOneServer();
Dynamic Rate Limiting
Để giới hạn lượt truy cập vào route trong một khoảng thời gian nhất định ở các phiên bản trước bạn sẽ phải hard code số lượng request tối đa:
Route::middleware('auth:api', 'throttle:60,1')->group(function () { Route::get('/user', function () { // }); });
Bây giờ bạn có thể chỉ định số lượng request tối đa động thông qua một thuộc tính của model User. Ví dụ model User có chứa thuộc tính rate_limit, bạn có thể sử dụng tên của thuộc tính này trong middleware throttle để tính toán số lượng request tối đa:
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () { Route::get('/user', function () { // }); });
Broadcast Channel Classes
Thay vì sử dụng Closures để authorize channel như trước đây, việc có thể làm phình to file routes/channels.php, bây giờ bạn có thể sử dụng các channel class. Dùng lệnh make:channel để tạo mới một class trong thư mục App/Broadcasting:
// php artisan make:channel OrderChannel <?php namespace AppBroadcasting; use AppUser; use AppOrder; class OrderChannel { /** * Create a new channel instance. * * @return void */ public function __construct() { // } /** * Authenticate the user's access to the channel. * * @param AppUser $user * @param AppOrder $order * @return array|bool */ public function join(User $user, Order $order) { return $user->id === $order->user_id; } }
Sau đó đăng ký channel mới trong routes/channels.php:
use AppBroadcastingOrderChannel; Broadcast::channel('order.{order}', OrderChannel::class);
Ngắn gọn hơn lúc trước rồi đúng ko nào.
API controller
Để tạo 1 resource controller không chứa các method create, edit, bạn có thể thêm flag --api khi chạy lệnh make:controller:
php artisan make:controller API/PhotoController --api
Eloquent Date Casting
Bây giờ bạn đã có thể tùy chỉnh định dạng của các cột có kiểu ngày giờ:
protected $casts = [ 'birthday' => 'date:Y-m-d', 'joined_at' => 'datetime:Y-m-d H:00', ];
Blade Component Aliases
Nếu bạn có một blade component được lưu ở thư mục con, bạn có thể tạo alias cho nó để dễ dàng sử dụng thay vì dùng một cái tên thật dài. Ví dụ nếu bạn có một blade component ở resources/views/components/alert.blade.php, bạn có thể tạo alias cho nó bằng Blade method component:
Blade::component('components.alert', 'alert');
Sau đó thì sử dụng cái alias đó thôi:
@alert('alert', ['type' => 'danger']) You are not allowed to access this resource! @endalert
Argon2 Password Hashing
Nếu ứng dụng của bạn đang chạy trên php 7.2.0 trở lên thì bây giờ bạn có thêm tùy chọn hash password bằng thuật toán Argon2. Bạn có thể tùy chỉnh hash driver bằng viêc edit file config/hashing.php
UUID Methods
Laravel 5.6 được thêm 2 method mới cho việc generate UUIDs là Str::uuid và Str::orderedUuid, đều trả về object của RamseyUuidUuid:
use IlluminateSupportStr; return (string) Str::uuid(); return (string) Str::orderedUuid();
Collision
Laravel 5.6 mặc định sử dụng package Collision, 1 dev Composer dependency, package này hổ trợ báo lỗi đẹp mắt khi bạn sử dụng command line.
Bootstrap 4
Laravel đã mặc định hổ trợ bootstrap 4 thay vì bootstrap 3 như trước.