Các tính năng mới của laravel 5.5 (p2)

Lời nói đầu.

Các tính năng mới của laravel 5.5 (p1) Trong bài viết trước mình đã giới thiệu một số chức năng mới của laravel 5.5 .... Ngày hôm nay mình sẽ tiếp tục trình bày về một số tính năng mới của version mới này. LET GO !

Nội dung

1, Validation Data Return

Ở các phiên bản trước việc tạo ra một bản ghi hợp lệ bắt đầu từ việc input data ==> check validate ==> lấy input data đó khởi tạo một bản ghi. Quy trình cụ thể sẽ là

public function store()
{
    $this->validate(request(), [
        'title' => 'required',
        'body' => 'required'
    ]);

    // return Post::create(request()->only(['title', 'body'])); or
    return Post::create(request()->all());
}

Nhìn từ đây ta có thể thấy rằng sẽ thật tiện lợi nếu có thể lấy data ra sau khi đã pass qua validate vì phần dữ liệu này đã đúng như ta mong muốn. Chính vì thể ở version mới này của laravel, các developer hoàn toàn có thể làm được điều này bằng cách sau :

public function store()
{
    $post = $this->validate(request(), [
        'title' => 'required',
        'body' => 'required'
    ]);

    return Post::create($post);
}

Hoặc có thể gọi validate từ request như sau :

public function store()
{
    $post = request()->validate([
        'title' => 'required',
        'body' => 'required'
    ]);

    return Post::create($post);
}

Tuy nhiên, với phương pháp này bạn cần chú ý với những dữ liệu không là bắt buộc mà dưới client gửi lên, nếu không chú ý bạn có thể làm cho những trường này mất giá trị ... bởi phương pháp này chỉ giữ lại dữ liệu tương ứng trong validate. Giải pháp cho vấn đề này là bạn cần cung cấp các trường không bắt buộc vào validate, chúng sẽ lấy giá trị ra nếu tồn tại trong request gửi lên (mặc định giá trị là null nếu không có).. Cụ thể như sau :

$post = request()->validate([
        'title' => 'required',
        'body' => 'required',
        'notRequiredField' => '',
    ]);

return Post::create($post);

2, Một chút thay đổi nhỏ với vendor:publish Command

Trong những version trước, khi chạy lệnh php artisan vendor:publish thì laravel sẽ public toàn bộ các tài nguyên từ các package bạn mới cài thêm vào hay chỉ đơn giản là của chính framework . Các tài nguyên này có thể là các file config , view hay là các file migration .

Với laravel 5.5 thì có 1 chút thay đổi nhỏ khi chạy lệnh này ... Nó sẽ giúp bạn rõ ràng hơn trong việc public tài nguyên. Nếu bạn chỉ chạy php artisan vendor:publish và ko có option gì thêm , thì laravel sẽ đưa ra cho bạn bảng lựa chọn xem bạn muốn public tài nguyên của package nào. Cụ thể như ảnh dưới đây :

Đên đây bạn chỉ cần chon xem muốn public tài nguyên gì là xong =)) .. Đương nhiên nếu bạn muốn public hết và cảm thấy việc chọn từng cái quá mất thời gian thì có thể chạy lệnh

    php artisan vendor:publish --all

3, Thêm mới câu lệnh migrate:fresh .

Ở các version cũ hơn, khi muốn refresh lại database chúng ta thường dùng câu lệnh php artisan migrate:refresh . Với việc chạy câu lệnh này, thực tế chúng ta đã yêu cầu laravel rollback lại toàn bộ các file migrate đã chạy trong quá trinh dev or deploy app ( chạy hàm down trong mỗi migrate)

Tuy nhiên , trong 1 số trường hợp không mong muốn hàm down không thể chạy được do gặp lỗi (có thể do dữ liệu hoặc bản thân code có vấn đè, hay do ai đó sửa trực tiếp database không thông qua migrate) ... Khi gặp trường hợp này việc refresh database là không thể ... Vì vây , laravel 5.5 đã sinh ra câu lệnh php artisan migrate:fresh , với câu lệnh này laravel sẽ xóa toàn bộ các bảng trong database vào chạy lại migrate ;

4 : Whoops is Back!

Đây là một feature mới của laravel mà mình thấy cực kì thú vị nữa ... của laravel, với các version trước , trang lỗi chỉ show cho bạn các action xử lý đi qua và sẽ chỉ ra cho bạn lỗi ở dòng nào và file nào. Với version mới này ngoài cung cấp 2 chit số trên laravel còn cung cấp nhiều hơn nữa ... Laravel cung cấp ảnh chụp vị trí lỗi của bạn.

Theo ý kiến của mình, việc show ảnh trực tiếp như thế này giúp bạn quan sát trực qua hơn về lỗi. Việc có một bức ảnh về đoạn mã lỗi giúp việc fix lỗi cũng trở nên dễ dàng hơn và thoải mái hơn

Hình ảnh minh họa :

Một điều thú vị là Whoops đi kèm với khả năng mở các tệp được tham chiếu trực tiếp trong IDE hoặc trình chỉnh sửa của bạn. Tính năng này chỉ hoạt động trong trường hợp tệp nguồn PHP của bạn có thể truy cập cục bộ vào máy mà trên đó trình soạn thảo được cài đặt. Để làm được điều này, bạn cần thêm đoạn mã dưới đây vào file app/Exceptions/Handler.php :

[...]
use Illuminate\Filesystem\Filesystem;
use Illuminate\Support\Arr;
use Whoops\Handler\PrettyPageHandler;
[...]
class Handler extends ExceptionHandler
{
[...]
    protected function whoopsHandler()
    {
        return tap(new PrettyPageHandler, function ($handler) {
            $files = new Filesystem;
            $handler->setEditor('sublime');
            $handler->handleUnconditionally(true);
            $handler->setApplicationPaths(
                array_flip(Arr::except(
                    array_flip($files->directories(base_path())), [base_path('vendor')]
                ))
            );
        });
    }
}

Đoạn mã trên chỉ là ví dụ để bạn có thể sửa code bằng editor là sublime , để tìm hiểu thêm về các editor được dùng để sửa mã , bạn có thể vào đây để xem chi tiết hơn .

Kết Luận.

Laravel 5.5 hiện còn rất nhiều feature mới mà mình vì thời gian có hạn chưa trình bày trong bài viết trên ... Mình xin phép trình bày chúng trong các bài viết lần sau. Thân !

Tài liệu tham khảo

Laracast Sitepoint Laravel Documment


All Rights Reserved