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.
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!
Nguyễn Sơn Hải
4 năm trước
Chào Nguyễn Sơn Hải,
Cảm ơn bạn nhé!
Vũ Thanh Tài
4 năm trước
Võ Quốc Hiệu
4 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
4 năm trước
Lâm Hoàng
4 năm trước
Nguyen Khanh Toan
3 năm trước
van son
3 năm trước
kiuiop
3 năm trước