+5

[Phần 1] Tìm hiểu các tính năng mới trong Laravel 5.5

Chào các bạn, Như các bạn đã biết, Laravel vừa released version 5.5 (LTS), do đó trong bài viết hôm nay mình xin giới thiệu một vài tính năng mới trong Laravel 5.5.

1. Whoops Package

Link: https://packagist.org/packages/filp/whoops Nếu bạn nào đã làm việc với Laravel từ version 4.x thì hẳn đã quen với package này. Đây là tính năng thông báo lỗi, debug lỗi, do đó Laravel đã đưa tính năng này quay lại trong version này. Hình ảnh mình họa:

2. Các tính năng liên quan tới Validate Request

2.1 Validate Request

  • Trong các version trước đó. Nếu chúng ta muốn validate một request ta phải truyền một instance của request vào method valide() trong controller. Minh họa:
	$thisvalidate(request(), [
        'a' => 'rule_a',
        'b' => 'rule_b',
        ....
    ]);
  • Trong version mới này, Laravel giới thiệu một cách code ngắn gọn hơn, nhưng hiệu quả không hề thua kém cách cũ Minh họa
$data = request()validate([
	‘title’ => ‘required’,
	‘description’ => ‘required’,
	...
]);

Với cách viết như trên, ta còn có thể nhận được các giá trị (tương tự khi ta dùng method Request::only()) ứng với các key (hoặc fields) ta đang validate.

Giải thích: Ở đây, ta đang validate hai key (hoặc fields) là: titledescription. => Vậy khi debug biết $data thì ta nhận được giá trị của title và description.

2.2 Customize Rule

  • Một feature tuyệt vời nữa của Laravel 5.5 đem đến là khả năng tạo rule tuyệt vời.
  • Nếu như các version trước, muốn viết rule cho riêng mình thì chúng ta sử dụng method:
	validator::extend()

(Lưu ý: version Laravel 5.5 vẫn sử dụng được method này)

  • Trong version mới này, Lar 5.5 đã tung ra một cách viết mới, clear hơn, dễ sử dụng hơn.

Minh họa viết rule mơi:

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class UsernameValidationRule implement Rule 
{
	public function passes($attribute, $value) 
	{
		return $value > 10;
	}

	public function message() 
	{
		return:attribute must be less than 10;
	}
}

Minh họa dùng rule

$requestvalidate([
	‘username’ => [
        'required',
        new UsernameValidationRule,
        ...
    ]
]);

Hoặc không cần tạo class Rule. Ta cũng có thể handle được vấn đề rule như sau:

$requestvalidate([
	‘username’ => [
        'required',
        function ($attribute, $value, $fail) {
                    if (strlen($value) < 10) {
                        $fail('username length errors');
                    }
                },
        ...
    ]
]);
  • Để tạo một rule mới ta có thể dùng lệnh Artisan sau: $ php artisan make:rule MyCustomRule

3. The migrate:fresh Migration Command

  • Trong version này, Laravel cũng vừa giới thiệu lệnh migrate:fresh. Lệnh này có vai trò gì?
  • Lệnh này sẽ drop tất cả các table hiện có và chạy lại migrations.
  • Nghe có vẻ giống lệnh migrate:refresh nhỉ 😄. Cần phân biệt rõ ràng:
  • migrate:refresh: rollback toàn bộ migrations và run lại các migrations.
  • migrate:fresh: drop tất cả table, và sau đó run lại các migrations

4. Method dump

  • Thông thường trong Laravel ta thường sử dụng method dd() để debug dữ liệu.
  • Version này Laravel bổ sung thêm một method nữa để debug data. Đó là: dump().
  • Giả sử, ta đang có một collection và đang filter như sau:
collect([1,2,3])map(function($i) { 
	return $i * 2; 
})
->reject(function($i){ 
	return $i < 3; 
});

Yêu cầu đặt ra:

  • Muốn xem các giá trị mỗi khi vòng lặp chạy mà không làm đứng vòng lặp. => Với yêu cầu này, nếu ta sử dụng method dd() thì vòng lặp sẽ dừng ngay lập tức. Method dump có thể sử dụng trong trường hợp này.
collect([1,2,3])->map(function($i){ 
	return $i * 2; 
})->dump()->reject(function($i){ 
	return $i < 3; 
});

5. The RefreshDatabase Trait

  • Trong quá trình chạy UnitTest trong Laravel 5.5, ta thường sử dụng 2 trait DatabaseTransactionsDatabaseMigrations để migrate và clear database. Tuy nhiên, trong quá trình sử dụng ta thường nhầm lẫn 2 trait này với nhau. Hiểu được điều này nên trong version mới ra mắt, Laravel 5.5 ra mắt một trait mới giải quyết tất cả các công việc liên quan đến database, đó là The RefreshDatabase Trait.
  • Do đó trong quá trình sử dụng Unit test, ta chỉ cần dùng Trait này và cấu hình database cho hợp lí.

Trong bài viết tiếp theo, mình sẽ giới thiệu các tính năng còn lại trong version này. Cảm ơn các bạn!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí