Laravel 5.5 sẽ có gì mới - Phần 3
Bài đăng này đã không được cập nhật trong 7 năm
Phần 1: https://viblo.asia/p/laravel-55-se-co-gi-moi-Az45bN6N5xY Phần 2: https://viblo.asia/p/laravel-55-se-co-gi-moi-phan-2-6J3ZgD9xlmB
11. Custom Validation Rules
Defining The Rule
Trong ứng dụng của mình, Taylor Otwell muốn xác nhận 1 Github repository và branch có thực sự tồn tại. Tất nhiên để làm được điều này chỉ có cách gọi API tới Github. Để bắt đầu, Taylor định nghĩa 1 class với 2 method passes
và message
được đặt trong namespace App\Rules
:
<?php
namespace App\Rules;
use App\Source;
use Illuminate\Contracts\Validation\Rule;
class ValidRepository implements Rule
{
/**
* The source control provider instance.
*
* @var \App\Source
*/
public $source;
/**
* The branch name.
*
* @var string
*/
public $branch;
/**
* Create a new rule instance.
*
* @param \App\Source $source
* @param string $branch
* @return void
*/
public function __construct($source, $branch)
{
$this->source = $source;
$this->branch = $branch;
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
if (! $this->source instanceof Source) {
return false;
}
return $this->source->client()->validRepository(
$value, $this->branch
);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The given repository is invalid.';
}
}
Xem nào, method passes
sẽ nhận 2 đối số $attribute
and $value
từ Laravel Validator. $attribute
là tên trường cần được validate và $value
là giá trị của trường đó. Method này sẽ trả về true hoặc false, tương đương với giá trị nhận được có đúng hay không.
Trong ứng dụng này, object Source
là 1 Eloquent model đại diện cho 1 source control provider
ví như GitHub.
Method message
sẽ trả về thông điệp báo lỗi phù hợp khi method passes
trả về false.
Using The Rule
Một khi đã được định nghĩa, bạn có thể sử dụng những validation rule tùy chỉnh trong request. Trong ví dụ này, chúng ta sử dụng method validate
, 1 method có sẵn trong object Request
trong Laravel 5.5:
<?php
use App\Rules\ValidRepository;
$request->validate([
'repository' => [
'required',
new ValidRepository($this->source(), $request->branch)
]
]);
Tất nhiên bạn cũng có thể sử dụng chúng trong Form Request hoặc bất cứ đâu mà bạn đã từng sử dụng trước đây.
12. Whoops is coming back
Whoops là 1 PHP framework xử lý lỗi đã từng được cài đặt sẵn trong Laravel 4 và sau đó đã được gỡ bỏ trong phiên bản Laravel 5.0. Và có thông tin rằng Whoops sẽ được mang trở lại trên Laravel 5.5.
Một số tính năng của Whoops:
- Flexible, stack-based error handling
- Stand-alone library with (currently) no required dependencies
- Simple API for dealing with exceptions, trace frames & their data
- Includes a pretty rad error page for your webapp projects
- Includes the ability to open referenced files directly in your editor and IDE
- Includes handlers for different response formats (JSON, XML, SOAP)
- Easy to extend and integrate with existing libraries
- Clean, well-structured & tested code-base Tin chắc nhiều người sẽ thích sự xuất hiện của các trang lỗi và nhìn thấy đoạn code gây ra lỗi ngay trên trang.
13. Package Auto-Discovery In Laravel 5.5
Trước đây (à hiện tại nữa ) đễ cài đặt một package chúng ta thường thực hiện những bước sau:
- Cài package:
composer require foo/bar
- Đăng ký provider trong
app.php
Foo\Bar\ServiceProvider::class,
- Có thể cần đăng ký Facade nữa:
'Bar' => Foo\Bar\Facade::class,
Thực sự rất nhàm chán với những công việc lặp đi lặp lại. Trong Laravel 5.5, bạn chỉ cần cài package và done, mọi thứ đã sẳn sàng vì Laravel đã làm hết cho bạn.
"extra": {
"laravel": {
"providers": [
"Foo\\Bar\\ServiceProvider"
],
"aliases": {
"Bar": "Foo\\Bar\\Facade"
}
}
}
Cùng đón chờ Laravel 5.5 với những tính năng tuyệt vời mới bạn nhé!
All rights reserved