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ó 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 App\Broadcasting;

use App\User;
use App\Order;

class OrderChannel
{
    /**
     * Create a new channel instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Authenticate the user's access to the channel.
     *
     * @param  \App\User  $user
     * @param  \App\Order  $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 App\Broadcasting\OrderChannel;

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::uuidStr::orderedUuid, đều trả về object của Ramsey\Uuid\Uuid:

use Illuminate\Support\Str;

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.