Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 1: Những tính năng mới trong Laravel 8

Chào mọi người, do mọi người rất ủng hộ với series học laravel của mình mà bản đó thì mình viết từ version 5.3 đến giờ thì laravel cũng đã update rất nhiều rồi có những thứ đã bị outdate. Nên mình sẽ viết thêm series mới và hướng dẫn mọi người trên nền Laravel 8 luôn.

Đầu tiên thì mình sẽ list ra những tính năng mới chính có trong laravel 8. Để mọi người cùng biết trước rồi sẽ đi vào chi tiết sau.

1. Trang welcome.

Điều đầu tiên đập vào mắt mình khi cài đặt laravel 8 đó chính là trang welcome default mới thay vì sử dụng bootstrap như trước thì ở phiên bản này Laravel sử dụng TailwindCSS. Một css framework cũng khá mới và nổi ở thời điểm hiện tại.

Laravel default welcome page

2. Thư mục Models.

Trước đây, mặc định laravel sử dụng model ở trong thư mục app. Chính vì điều này rất nhiều người sử dụng laravel đã phải tạo thêm thư mục Models bên trong thư mục app để cho struct được rõ ràng hơn. Chính vì sự bất tiện này từ phiên bản laravel 8 trở đi laravel đã để default model nằm trong thư mục app/Models.

3. Model Factory Class.

Nếu như trước đây, khi khai báo một facetory thì chúng ta phải viết dưới dạng file non-class. Thì giờ đây laravel đã cải tiến factory thành các class cho code readable hơn. Đồng thời Laravel cũng đã tối ưu việc relation support.

VD: Khai báo UserFactory.

<?php

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = User::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'name' => $this->faker->name,
            'email' => $this->faker->unique()->safeEmail,
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }

    /**
     * Indicate that the user is suspended.
     *
     * @return \Illuminate\Database\Eloquent\Factories\Factory
     */
    public function suspended()
    {
        return $this->state([
            'account_status' => 'suspended',
        ]);
    }
}

4. Migration Squashing.

Trong các phiên bản trước các file migration sẽ được đặt trong file trong thư mục database/migrations dẫn đến trường hợp về lâu dài thì số lượng này có thể tăng lên đến vài trăm file. Lúc này quả thật quản lí rất khó, nhận thấy điều này laravel 8 đã tối ưu chúng và thêm một feature cho phép chuyển đổi tất cả file migation vào một file SQL và file này sẽ nằm trong thư mục database/schema.

Lưu ý: Chức năng này chỉ hỗ trợ MySQL và PostgreSQL

5. Job Batching.

Tính năng mới này cho phép chúng ta gom nhóm một loạt các job vào một batch và thực thí chúng đồng thời tính năng này cũng tạo ra thêm một loại các event cho batch. Ví dụ như then, catch, finally (mình sẽ nói chi tiết trong các bài sau).

VD: Ví dụ một batch trong laravel 8.

use App\Jobs\ProcessPodcast;
use App\Podcast;
use Illuminate\Bus\Batch;
use Illuminate\Support\Facades\Bus;
use Throwable;

$batch = Bus::batch([
    new ProcessPodcast(Podcast::find(1)),
    new ProcessPodcast(Podcast::find(2)),
    new ProcessPodcast(Podcast::find(3)),
    new ProcessPodcast(Podcast::find(4)),
    new ProcessPodcast(Podcast::find(5)),
])->then(function (Batch $batch) {
    // All jobs completed successfully...
})->catch(function (Batch $batch, Throwable $e) {
    // First batch job failure detected...
})->finally(function (Batch $batch) {
    // The batch has finished executing...
})->dispatch();

return $batch->id;

6. Tối ưu Rate limit.

Trong phiên bản này Laravel đã cho phép chúng ta tạo ra các rate limit một các đơn giản qua RateLimiter (Illuminate\Support\Facades\RateLimiter). Đồng thời chúng ta cũng có thể cho logic vào trong limiter.

VD: Khai báo một rate limit.

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;

RateLimiter::for('global', function (Request $request) {
    return Limit::perMinute(1000);
});

Khi muốn sử dụng rate limit cho route thì các bạn chỉ cần khai báo middleware với name throttle:global

7. Cải thiện maintenance mode.

Trong phiên bản này Laravel đã bổ sung thêm secret cho maintenace mode. Khi thiết lập secret cho maintenace mode thì bạn chỉ cần điền thêm secret vào URL là bạn đã có thể truy cập vào web qua chế độ maintenace.

VD

php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"

Lúc này bạn chỉ cần thêm 1630542a-246b-4b66-afa1-dd72a4c43515 vào sau URL là được.

VD:

https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515

Bạn cũng có thể setting view render khi đang ở chế độ maintain qua option --render="view.file"

VD:

php artisan down --render="errors::503"

8. Cải tiến event listen.

Giờ đây bạn đã có thể lắng nghe event qua Event::listen() mà khỏi cần khai báo file listener.

VD: Khai báo listen sự kiện PodcastProcessed.

use App\Events\PodcastProcessed;
use Illuminate\Support\Facades\Event;

Event::listen(function (PodcastProcessed $event) {
    //
});

Và nếu như bạn muốn đưa một listen vào queue thì trong phiên bản này laravel có phát triển thêm function queueable cho phép chúng ta đưa một callable vào queue.

VD: Đưa listen trên vào queue.

use App\Events\PodcastProcessed;
use function Illuminate\Events\queueable;
use Illuminate\Support\Facades\Event;

Event::listen(queueable(function (PodcastProcessed $event) {
    //
}));

9. Tối artisan serve.

Trước đây khi bạn đổi thông tin env thì cần phải restart lại command thì env mới được apply. Nhưng giờ thì không cần nữa, bởi laravel đã code thêm chức năng detect thay đổi trong file .env nếu thay đổi nó sẽ tự động restart lại cho chúng ta.

10. More

Ngoài những thứ trên thì Laravel còn phát triển thêm một vài package khác như:

- Laravel Jetstream
- Laravel Fortify
- Laravel Sai

Nếu có thời gian mình sẽ viết chi tiết về nó sau.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

8 Comments

cảm ơn anh đã chia sẻ kiến thức nha, em rất thích đọc blog của anh, em dân tay ngang đang đi làm nhưng kiến thức cơ bản chưa nắm được nhiều, đọc blog của anh rất thích, mong anh ra nhiều series hơn nữa ^^.

Nguyễn Sơn Hải

3 năm trước

Chào Nguyễn Sơn Hải,
Cảm ơn bạn nhé!

Vũ Thanh Tài

3 năm trước

Chào anh Tài,
Cảm ơn anh đã chia sẻ kiến thức, thật sự rất bổ ích.
Nếu như có thêm 1 kênh Donate (ngoài quảng cáo) thì chắc chắn tôi sẽ ủng hộ anh để anh có thể duy trì trang web và chia sẻ kiến thức cho mọi người.
Hiệu,

Võ Quốc Hiệu

3 năm trước

Chào Võ Quốc Hiệu,

Thời gian tơi có thể mình sẽ áp dụng nhé.
Rất cảm ơn bạn đã góp ý ạ!

Vũ Thanh Tài

3 năm trước

Tác giả viết dễ hiểu chi tiết quá, ủng hộ bạn

Lâm Hoàng

3 năm trước

Chào anh Tài,
Chưa học Laravel 5.3 học Laravel 8 luôn được không?

Nguyen Khanh Toan

3 năm trước

làm thế nào để chạy Job Batching

van son

2 năm trước

bạn ơi sao mình làm trong heroku thì nó báo lỗi 404 forbidden

kiuiop

2 năm trước

Bình luận

Captcha