Sắp ra mắt Laravel 7.x có gì mới?
Chỉ còn vài tuần nữa là bản phát hành Laravel 7 ra mắt, vì vậy mình đã tập hợp một danh sách một số tính năng và thay đổi mới quan trọng. Tất nhiên đây không phải là tất cả nhưng nó là một tổng quan ngắn gọn về một số nội dung mới.
Thêm withQueryString cho pagination
Ở các phiên bản Laravel trước, khi dùng phân trang và bạn muốn giữ lại các query url thì sẽ dùng với appends(request()->query())
Với thay đổi trong 7.x sẽ chỉ cần dùng withQueryString()
Thêm "subquery value" trong câu lệnh where
Giả sử bạn có một ứng dụng olympics theo dõi tất cả các vận động viên và huy chương của họ. Giả sử bạn muốn tìm tất cả các vận động viên có huy chương mới nhất là huy chương vàng. Đây là cách bạn có thể làm điều đó bằng tính năng mới này:
$athletes = Athlete::where(function ($query) {
$query->select('type')
->from('medals')
->whereColumn('athlete_id', 'athletes.id')
->orderByDesc('awarded_date')
->limit(1);
}, 'Gold')->get();
Trước đây method where với tham số thứ nhất là 1 cột trong table, thì giờ đây nó có thể là 1 subquery (1 column của bảng khác liên kết)
Thêm Collection::sortDesc()
Laravel hiện tại chỉ có sort mà k có sortDesc nên đây là method mới, cách hoạt động giống với sort() chỉ là nghịch đảo.
$collection = collect([5, 3, 1, 2, 4]);
$sorted = $collection->sortDesc();
$sorted->values()->all();
// [5, 4, 3, 2, 1]
Thêm HandleCors middleware
Sẽ có 1 middleware mặc định mới tên là HandleCors sử dụng package mặc định luôn https://github.com/fruitcake/laravel-cors dùng để cho phép bạn gửi Cross-Origin Resource Sharing headers
Cho phép Collection::push nhận nhiều giá trị đầu vào
Hiện tại collection push chỉ nhận 1 giá trị đầu vào, phiên bản 7x sẽ nhận nhiều hơn là 1
$collection->push(5);
$collection->push('string')
$collection->push(['a', 'b', 'c'])
$collection->push(['x' => 'a', 'y' => 'b', 'z' => 'c'])
// push multiple items as parameters
$collection->push($item, $anotherItem, $thirdItem);
// push multiple items from array
$collection->push(...$itemsArray);
// we can even pass another collection without ->toArray()
$collection->push(...$itemsCollection);
// and our push can be empty as well
$collection->push();
$collection->push(...[]);
Tùy chỉnh Cast Types
Hiện tại với $casts thì chỉ dùng được các loại đã được định sẵn, phiên bản 7x bạn có thể tùy chỉnh nó theo ý mình. Object cast phải implements Illuminate\Contracts\Database\Eloquent\CastsAttributes
là contract của CastsInboundAttributes
<?php
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
class AddressCaster implements CastsAttributes
{
public function get($model, $key, $value, $attributes)
{
return new Address(
$attributes['address_line_one'],
$attributes['address_line_two']
);
}
public function set($model, $key, $value, $attributes)
{
return [
'address_line_one' => $value->lineOne,
'address_line_two' => $value->lineTwo
];
}
}
Không còn hỗ trợ Monolog v1
Đơn giản là có Monolog v2 rồi nên k support nữa
Implicit Route Model Binding dễ dàng hơn
Nếu các bạn biết đến tính năng Route Model Binding trong Laravel thì model sẽ tự động Binding vào controller dựa vào controller
Route::get('/posts/{post}', function (Post $post) {
// ...
});
Khi bạn muốn bind theo id, khi thì bind theo slug thì bạn phải custom trong model bằng
<?php
class Post extends Model
{
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'slug';
}
}
Ở phiên bản 7x này sẽ dễ dàng hơn
// bind theo slug ở ngoài front-end
Route::get('/posts/{post:slug}', function (Post $post) {
// ...
});
// bind theo id ở trong admin panel
Route::get('/admin/posts/{post:id}/edit', function (Post $post) {
// ...
});
Ra mắt gói Laravel Airlock
Mình có đăng 1 bài giới thiệu ở page Laravel Việt Nam: https://www.facebook.com/LaravelVietNam
Laravel Airlock một official package mới do Laravel phát triển.
Laravel Airlock cung cấp một hệ thống xác thực (authentication system) cực kì nhẹ cho website SPA và simple API.
Lí do ra đời Airlock:
1. Các giải pháp cho SPA Authentication hiện nay đều cố lưu trữ token của người dùng ở dưới local, điều đó đồng nghĩa với việc lỗ hổng XSS sẵn sàng chờ chực và đọc lấy chúng.
2. Nếu sử dụng Passport và bạn chỉ dùng để chứng thực thì k khác gì dùng dao mổ trâu đi giết gà.
3. Nếu ở trên Passport quá nặng, người ta sẽ nghĩ đến 1 gói nhỏ hơn để giải quyết vấn đề này đó là JWT, bằng cách đơn giản cung cấp 1 token cho bên thứ ba, và nó hoàn toàn riêng biệt và không có gì để làm với OAuth cả.
Nếu đang xây dựng website SPA Laravel bạn cân nhắc dùng gói này nhé. Thời điểm đăng vẫn còn quá sớm để công khai, nhưng ad giới thiệu trước để các bạn tìm hiểu.
https://github.com/laravel/airlock
Multiple Mailers
Hiện tại Laravel có multi database, multi log, multi session, multi broadcast,... chỉ chưa có multi mailers.
Mailer nó là dạng singleton trong container nên dù bạn có change config mailer cũng k thay đổi gì cả, phải custom rất mệt.. nên có thể nói tính năng này rất hữu ích
Mail::to('[email protected]')->send(new Mail);
Mail::mailer('other-mailer')->to('[email protected]')->send(new Mail);
Cấu hình multi mailers sẽ có trong file config mail.php trong phiên bản 7x
Template mail/notification mới
Trông sẽ như thế này
Auth mặc định sẽ return API style khi nhận XHR Requests
Điều này cập nhật xác thực build sẵn để trả về response 2xx khi bình thường (hoặc 4xx khi xác thực) trên các yêu cầu XHR thay vì trả lại chuyển hướng và thao tác phiên, v.v.
Nâng cấp lên Symfony 5
Laravel xài đồ mới thôi nên k có gì để bàn.
Ủng hộ Chung Nguyễn Blog
Chung Nguyễn Blog sử dụng FlashVPS - Dịch vụ quản trị máy chủ chuyên nghiệp để quản lý VPS
#FlashVPS là dịch vụ cloud panel trên nền tảng web hỗ trợ khách hàng:
- * Quản lý máy chủ số lượng nhiều
- * Không có kinh nghiệm quản lý máy chủ
- * Thích sử dụng giao diện web đơn giản, trực quan hơn terminal
- * Quá nhàm chán với việc ghi nhớ và lặp lại việc gõ các câu lệnh
- * Muốn tự động hóa mọi thao tác
- * Muốn tiết kiệm thời gian quản trị máy chủ
- * Muốn tiết kiệm tiền bạc, nhân lực quản trị máy chủ 👉 https://flashvps.dev
Các bài viết trên website thường xuyên được đăng tải và cập nhật trên trang Facebook Chung Nguyễn Blog hãy tặng cho Chung một LIKE nhé! Mãi yêu các bạn!
813 👍
Bình luận