+3

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

Chào các bạn, Trong bài viết hôm nay, chúng ta cùng tìm hiểu thêm một số tính năng (có thể không lớn lắm) trong Laravel version 5.5 nhé 😃

1. Route Helper

  • Trong version này Laravel bổ sung thêm 2 method liên quan đến Route, tuy không phải là một tính năng lớn (big feature), nhưng chúng ta cũng nên update kiến thức cho riêng mình phải không nào 😃
  • Method thứ nhất: render ra view welcome, tương ứng với đường đường dẫn: /welcome
Route::view('/welcome', 'welcome');
  • Method thứ 2: Redirect tất cả các request về home sang dashboard
Route::redirect('home', 'dashboard');

2.Exception Helper Functions

Trong version này, Laravel bổ sung 2 helper liên quan đến việc throw Exception giúp cho việc code trở nên dễ dàng, ngắn gọn hơn.

Lưu ý: cả 2 helper này đều cần 3 arguments. Argrument thứ 3 optional, không bắt buộc.

  • Method: throw_if (). Nếu Argument thứ nhất trả về true thì sẽ throw Exception
$number = 2;
throw_if($number !== 3, new NotThreeException('Number is not three'));
// or
throw_if($number !== 3, NotThreeException::class, 'Number is not three');
  • Và method throw_unless (). Nếu Argument thứ nhất trả về false thì sẽ throw Exception
$number = 2;
throw_unless($number === 3, new NotThreeException('Number is not three'));
// or
throw_unless($number === 3, NotThreeException::class, 'Number is not three');

3.JSON Error Stack Traces

Trong các version trước (<5.5), khi call API bằng PostMan. Nếu xảy ra lỗi thì Laravel render/show lỗi bằng HTML. Đôi lúc việc này làm chúng ta khó chịu, và khó follow lỗi.

Hiểu được điều này, Laravel 5.5 đã cải thiện. Khi call API, nếu có lỗi xuất hiện thì ta sẽ nhận được một chuỗi JSON trả về. Chuỗi json này sẽ báo lỗi ở file nào, line nào, ....

4.Automatic Package Discovery

Trong Laravel, khi cài các Third-package bằng composer. Ta có các steps như sau:

  • install package (cài package)
  • Register the package's service provider (khai báo service cho ứng dụng biết)
  • Register facade (khai báo facade nếu có)

Việc này tương đối dài dòng. Hiểu được vấn đề này, Laravel 5.5 đã cho ra mắt tính năng: Automatic Package Discovery.

Vậy tính năng này hoạt động như thế nào ? Sau đây là file composer.json của package Laravel Debugbar, Các bạn hãy theo dõi nhé

"extra": {
    "laravel": {
        "providers": [
            "Foo\\Bar\\ServiceProvider"
        ],
        "aliases": {
            "Bar": "Foo\\Bar\\Facade"
        }
    }
}

Như ta thấy, trong file json này có một section tên Extra. Ta phải khai báo provider và alias vào đây.

Vậy, tại sao phải làm thế này ? À là thế này, thông thường, sau khi ta gỡ (uninstall) một package nào đó. Ta vẫn còn các khai báo liên quán tới package (provider, alias) trong file config/app.php. Điều này có thể gây ra lỗi hoặc các issue trong một vài tính huống khi coding.

Với tính năng package autodiscovery, khi một package removed khỏi app. Thì tất cả moi thứ liên quan đến package đều được remove theo 😃

5.Custom Exception Report Method

Trong các version trước,. Nếu chúng ta muốn xử lí các Exception, customize các Exception trước khi render/report, ta thường code (code phần logic, xử lí, ...) tại method render()/report() của file app/Exceptions/Handler.php. Như dưới đây:

[...]
public function report(Exception $exception)
{
    if ($exception instanceof CustomException) {
        // Do something
    }

    if ($exception instanceof MyOtherException) {
        // Do something
    }

    if ($exception instanceof MyOtherCustomException) {
        // Do something
    }

    return parent::report($exception);
}
[...]

Giả sử, ta cần customize 50 Exception. Lúc đó nếu làm như trên thì .... Phải nói thế nào nhỉ, à chắc là bad coding

Hiểu được điều này, Laravel 5.5 cho phép ta định nghĩa method report() hoặc render() trong các Exception. Như sau: Giả sử ta có file Exception: app/Exceptions/CustomException.php

Với method report(), ta có cách xử lí như sau:

[...]
class CustomException extends \Exception
{
    public function report()
    {
        // code here
    }
}
[...]

Với method render(), ta có 2 cách xử lí như sau:

  • cách 1: viết method render() trong custom Exception giống với method report()
<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Contracts\Support\Responsable;

class CustomException extends Exception
{
    public function render($request)
    {
        return response(
            'You are posting too frequently, Please take a break!',
            429
        );
    }
}
  • cách 2: implements method toResponse() của interface Illuminate\Contracts\Support\Responsable. Như sau:
<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Contracts\Support\Responsable;

class CustomException extends Exception implements Responsable
{
    public function toResponse($request)
    {
        return response(
            'You are posting too frequently, Please take a break!',

            429
        );
    }
}

6.Model Factory Generators

Trong các version trước, Nếu toàn bộ phần factory đều được viết trong một file duy nhất là file app/factories/ModelFactory.php. Việc này chưa clear lắm, đôi lúc gây nhầm lẫn do viết nhiều factory trong 1 file.

Trong version này, Laravel đã tách các Factory cho từng model cụ thể. Không viết chung một file như trước đây nữa.

Ta có thể generate ra một model factory như sau:

php artisan make:factory Post

Lệnh này sẽ tạo ra file PostFactory ở folder database/factories/

Đến đây, mình xin tạm dừng bài viết. Cảm ơn các bạn đã đọc 😃


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í