[Phần 2] Tìm hiểu các tính năng mới trong Laravel 5.5
Bài đăng này đã không được cập nhật trong 3 năm
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 methodreport()
<?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 interfaceIlluminate\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