Phương pháp được sử dụng để chỉ định thông báo tùy chỉnh cho lỗi trình xác thực trong yêu cầu biểu mẫu là gì?

Flavio Rosselli

Theo

15 Tháng tám, 2019

·

7 phút đọc

Xác thực trong Laravel

Bạn cần biết gì về Trình xác thực Laravel?

  1. Logic xác thực
  2. Những gì có sẵn cho bạn?
  3. Hiển thị thông báo lỗi
  4. Tùy chỉnh thông báo lỗi, thuộc tính và trình giữ chỗ
  5. Dịch thông báo lỗi, thuộc tính và trình giữ chỗ
  6. Cách sử dụng Mẫu yêu cầu
  7. Tạo Trình xác thực theo cách thủ công
  8. Tạo quy tắc xác thực tùy chỉnh
  9. Mở rộng quy tắc và trình giữ chỗ tùy chỉnh
  10. Xác thực có điều kiện
  11. Ghi chú cuối cùng
1. Logic xác thực

• Có hai cách để xác thực dữ liệu. Sử dụng $request->validate[] hoặc tạo Trình xác thực theo cách thủ công bằng facade [Trình xác thực. chế tạo[]].
• Theo mặc định, lớp trình điều khiển cơ sở của Laravel sử dụng đặc điểm ValidatesRequests cung cấp một phương thức thuận tiện để xác thực yêu cầu HTTP đến.
• Xác thực[] được cung cấp bởi đối tượng Illuminate\Http\Request.
• Nếu quy tắc xác thực vượt qua, mã của bạn sẽ tiếp tục thực thi bình thường;
• Nếu xác thực không thành công, một ngoại lệ sẽ được đưa ra và phản hồi lỗi thích hợp sẽ tự động được đưa ra . Trong trường hợp yêu cầu HTTP truyền thống, phản hồi chuyển hướng sẽ được tạo, trong khi phản hồi JSON sẽ được gửi cho yêu cầu AJAX.
• Tất cả các lỗi xác thực sẽ tự động được đưa vào phiên.
• Khi sử dụng phương thức xác thực trong một yêu cầu AJAX, Laravel tạo một phản hồi JSON chứa tất cả các lỗi xác thực sẽ được gửi cùng với mã trạng thái HTTP 422.

# request
$validatedData = $request->validate[[
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]];

# via Facade
$validator = Validator::make[$request->all[], [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]];

if [$validator->fails[]] {
return redirect['post/create']
->withErrors[$validator]
->withInput[];
}
2. Những gì có sẵn cho bạn?

• 63 quy tắc xác thực
• 2 lệnh thủ công [thực hiện. yêu cầu, thực hiện. rule]
• 7 Trình giữ chỗ [. thuộc tính,. khác,. kích thước,. đầu vào,. tối thiểu,. tối đa,. các giá trị]
… và rất nhiều phương pháp và chỉ thị lưỡi cắt.

3. Hiển thị thông báo lỗi

• Laravel sẽ kiểm tra lỗi trong dữ liệu phiên và tự động liên kết chúng với chế độ xem [$ biến lỗi] nếu có.
• Bạn cũng có thể sử dụng lệnh @error Blade để nhanh chóng kiểm tra xem có tồn tại thông báo lỗi xác thực cho một thuộc tính nhất định hay không.
• Lệnh @error có biến $message để hiển thị thông báo lỗi.

@if [$errors->any[]]


    @foreach [$errors->all[] as $error]
  • {{ $error }}

  • @endforeach

@if [$errors->has['email']]
@endif

@endif
# available methods
$errors->first[]
$errors->get[]
$errors->all[]
$errors->has[]
$errors->any[]
# @error Directive
Post Title
@error['title']
{{ $message }}

@enderror
4. Tùy chỉnh thông báo lỗi, thuộc tính và trình giữ chỗ

• Có một số cách để chỉ định thông báo tùy chỉnh.
• Bạn có thể chuyển các thông báo tùy chỉnh làm đối số thứ ba cho Trình xác thực. chế tạo[].
• Hãy nhớ rằng bạn có 7 Trình giữ chỗ [. thuộc tính,. khác,. kích thước,. đầu vào,. tối thiểu,. tối đa,. giá trị] có sẵn để sử dụng.
• Trong Yêu cầu biểu mẫu, bạn có thể tùy chỉnh thông báo lỗi bằng cách ghi đè thông báo[] và thuộc tính[]. Các phương thức này sẽ trả về một mảng các cặp thuộc tính/quy tắc và thông báo lỗi tương ứng của chúng.
• Trình giữ chỗ. thuộc tính và. giá trị nên được thay thế trong mảng thuộc tính và giá trị [cần được xác định].

5. Dịch thông báo lỗi, thuộc tính và trình giữ chỗ

Chỉ cần dịch tệp resource/lang/en/validation. php.
Hãy đọc bài viết này nếu bạn cần thêm thông tin về Dịch thuật trong Laravel.

6. Yêu cầu mẫu

• Đối với các tình huống xác thực phức tạp hơn, bạn có thể muốn tạo các yêu cầu Biểu mẫu là các lớp yêu cầu tùy chỉnh có chứa logic xác thực.
• Để tạo một lớp yêu cầu biểu mẫu, hãy chạy php artisan make. yêu cầu PostRequest sẽ được đặt trong thư mục ứng dụng/Http/Requests.
• Tất cả những gì bạn cần làm là nhập gợi ý yêu cầu biểu mẫu vào phương thức điều khiển của bạn.
• Yêu cầu biểu mẫu đến được xác thực trước khi phương thức của bộ điều khiển được gọi, nghĩa là bạn không cần sử dụng bất kỳ logic xác thực nào trong bộ điều khiển của mình.
• Nếu xác thực không thành công, quy trình sẽ hoàn toàn giống với quy trình truyền thống.
• Bạn có thể thêm dấu móc sau vào yêu cầu biểu mẫu, sử dụng withValidator[]. Phương thức này nhận được trình xác thực được xây dựng đầy đủ, cho phép bạn gọi bất kỳ phương thức nào của nó trước khi các quy tắc xác thực thực sự được đánh giá.
• Lớp yêu cầu biểu mẫu cũng chứa một hàm ủy quyền[] để kiểm tra xem người dùng được xác thực có thực sự có quyền cập nhật một tài nguyên nhất định hay không. Nếu bạn dự định có logic ủy quyền trong phần khác của ứng dụng, hãy trả về true.
• Tất cả các yêu cầu biểu mẫu mở rộng lớp yêu cầu Laravel cơ sở. Người dùng [] có thể được sử dụng để truy cập thông tin người dùng hiện được xác thực.

# artisan
php artisan make:request PostRequest
# app/Http/Requests
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class PostRequest extends FormRequest {
public function authorize[] {
return false;
}
public function rules[] {
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}
}
# type-hint the request on controller
public function store[PostRequest $request] {
# The incoming request is valid...
# Retrieve the validated input data...
$validated = $request->validated[];
}
7. Tạo Trình xác thực theo cách thủ công

• Nếu bạn không muốn sử dụng phương thức xác thực[] theo yêu cầu
[$request->validate[]], bạn có thể tạo phiên bản trình xác thực theo cách thủ công bằng cách sử dụng mặt tiền Trình xác thực . chế tạo[]].
• Sau khi kiểm tra xem xác thực yêu cầu có thất bại hay không, bạn có thể sử dụng withErrors[] để đưa thông báo lỗi vào phiên. Biến $errors sẽ tự động được chia sẻ với chế độ xem của bạn sau khi chuyển hướng, cho phép bạn dễ dàng hiển thị lại cho người dùng. withErrors[] chấp nhận trình xác thực, MessageBag hoặc mảng PHP.
• Bạn vẫn có thể tận dụng lợi thế của chuyển hướng tự động được cung cấp bởi tính năng xác thực [] của yêu cầu gọi tính năng xác thực [] trên một phiên bản trình xác thực hiện có. Nếu xác thực không thành công, người dùng sẽ tự động được chuyển hướng hoặc trong trường hợp yêu cầu AJAX, phản hồi JSON sẽ được trả về.
• Trình xác thực cũng cho phép bạn đính kèm các cuộc gọi lại để chạy sau khi hoàn tất xác thực.

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;

class PostController extends Controller {
public function store[Request $request] {
$validator = Validator::make[$request->all[], [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]];

if [$validator->fails[]] {
return redirect['post/create']
->withErrors[$validator]
->withInput[];
}

# after validation hook
$validator = Validator::make[...];

$validator->after[function [$validator] {
if [$this->somethingElseIsInvalid[]] {
$validator->errors[]->add['field', 'Something is wrong'];
}
}];

if [$validator->fails[]] {
//
}

// Store the blog post..
}
}

# validator with automatic redirection
$validator = Validator::make[$request->all[], [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]]->validate[];
8. Tạo quy tắc xác thực tùy chỉnh

• Để tạo quy tắc xác thực của riêng bạn, hãy sử dụng php artisan make. quy tắc sẽ đặt quy tắc mới trong thư mục app/Rules.
• Đối tượng Rule chứa hai phương thức. vượt qua [] và tin nhắn [].
• Bạn có thể gọi trình trợ giúp trans[] từ phương thức thông báo của mình nếu bạn muốn trả lại thông báo lỗi từ các tệp dịch của mình.
• Khi quy tắc đã được xác định, bạn có thể đính kèm quy tắc đó với trình xác thực bằng cách chuyển một thể hiện của đối tượng quy tắc cùng với các quy tắc xác thực khác của bạn.
• Nếu bạn chỉ cần chức năng của quy tắc tùy chỉnh một lần trong ứng dụng của mình, bạn có thể sử dụng Đóng thay vì đối tượng quy tắc.

# artisan 
php artisan make:rule Uppercase

# app/Rules\Uppercase
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;

class Uppercase implements Rule {

public function passes[$attribute, $value] {
return strtoupper[$value] === $value;
}

public function message[] {
return 'The :attribute must be uppercase.';
}
}

# to return an error message from your translation files.
public function message[] {
return trans['validation.uppercase'];
}

# attach the rule to a validator
use App\Rules\Uppercase;

$request->validate[[
'name' => ['required', 'string', new Uppercase],
]];

# using Closures
$validator = Validator::make[$request->all[], [
'title' => [
'required',
'max:255',
function [$attribute, $value, $fail] {
if [$value === 'foo'] {
$fail[$attribute.' is invalid.'];
}
},
],
]];
9. Mở rộng quy tắc và trình giữ chỗ tùy chỉnh

• Một phương pháp khác để đăng ký quy tắc xác thực tùy chỉnh là sử dụng tiện ích mở rộng[] trên mặt tiền Trình xác thực trong nhà cung cấp dịch vụ.
• Bạn cũng có thể truyền một lớp và phương thức cho phương thức mở rộng thay vì Đóng.
• Để xác định thông báo lỗi cho quy tắc tùy chỉnh của bạn, hãy sử dụng mảng thông báo tùy chỉnh nội tuyến hoặc bằng cách thêm mục nhập vào tệp ngôn ngữ xác thực. Thông báo này phải được đặt ở cấp độ đầu tiên của mảng, không phải trong mảng tùy chỉnh, chỉ dành cho các thông báo lỗi thuộc tính cụ thể.
• Người thay thế. nếu bạn cần xác định các thay thế trình giữ chỗ tùy chỉnh cho các thông báo lỗi, bạn nên tạo trong phương thức khởi động của nhà cung cấp dịch vụ một Trình xác thực tùy chỉnh và gọi đến trình thay thế[] trên mặt tiền Trình xác thực.

namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;

class AppServiceProvider extends ServiceProvider {
public function register[] { }

public function boot[] {
Validator::extend['foo', function [$attribute, $value, $parameters, $validator] {
return $value == 'foo';
}];

# you may also pass a class and method to the extend method instead of a Closure.
Validator::extend['foo', 'FooValidator@validate'];

# replacer
Validator::replacer['foo', function [$message, $attribute, $rule, $parameters] {
return str_replace[...];
}];
}
}
10. Xác thực có điều kiện

• Đôi khi là quy tắc xác thực và phương thức.
• Là quy tắc xác thực. bạn có thể chỉ muốn chạy kiểm tra xác thực đối với một trường nếu trường đó có trong mảng đầu vào.
• Là phương thức. bạn có thể chỉ muốn yêu cầu một trường nhất định nếu trường khác đáp ứng một điều kiện hoặc bạn có thể cần hai trường để có một giá trị nhất định chỉ khi có trường khác.
• Nếu bạn đang cố xác thực một trường phải luôn hiện diện nhưng có thể trống, hãy kiểm tra các trường tùy chọn hoặc có thể rỗng.

# as validation rule
$v = Validator::make[$data, [
'email' => 'sometimes|required|email',
]];
# as method
$v = Validator::make[$data, [
'email' => 'required|email',
'games' => 'required|numeric',
]];
$v->sometimes['reason', 'required|max:500', function [$input] {
return $input->games >= 100;
}];
11. Ghi chú cuối cùng

• nullable. bạn cần đánh dấu các trường yêu cầu "tùy chọn" của mình là có thể vô giá trị nếu bạn không muốn trình xác thực coi các giá trị null là không hợp lệ.
• Theo mặc định, Laravel bao gồm phần mềm trung gian TrimStrings và ConvertEmptyStringsToNull trong ứng dụng của bạn.

Chúc một ngày tốt lành.
Rosselli.

Phương pháp được sử dụng để định cấu hình quy tắc xác thực trong yêu cầu biểu mẫu trong laravel là gì?

Lớp Laravel Form Request đi kèm với hai phương thức mặc định auth[] và rules[] . Bạn có thể thực hiện bất kỳ logic ủy quyền nào trong phương thức auth[] cho dù người dùng hiện tại có được phép yêu cầu hay không. Và trong phương thức rules[], bạn có thể viết tất cả quy tắc xác thực của mình.

Bạn nên triển khai những phương pháp nào cho laravel trình xác thực tùy chỉnh của mình?

Chúng tôi sẽ hướng dẫn bạn tổng quan này để bạn có thể hiểu đầy đủ về cách xác thực yêu cầu dữ liệu đến trong Laravel. .
Xác định các tuyến đường khác nhau. .
Tạo bộ điều khiển mới. .
Mã hóa logic xác thực. .
Thuộc tính lồng nhau. .
Tạo và triển khai các yêu cầu biểu mẫu. .
Các móc sau để hình thành yêu cầu

Làm cách nào để tùy chỉnh thông báo lỗi xác thực trong laravel?

Để khắc phục điều này, chúng ta có thể tùy chỉnh các thông báo lỗi bằng cách chuyển một mảng thứ hai làm đối số, chứa các khóa được tạo bằng cách sử dụng tên của tham số, dấu chấm và sau đó là tên của . - the value will be the error message we want to display.

Điều nào sau đây là đúng để nhanh chóng xác định xem có tồn tại thông báo lỗi xác thực cho một thuộc tính nhất định hay không?

Bạn cũng có thể sử dụng @chỉ thị Blade Blade để nhanh chóng kiểm tra xem có tồn tại thông báo lỗi xác thực cho một thuộc tính nhất định hay không.

Chủ Đề