Trong khi bạn đang làm việc với đầu vào và biểu mẫu của người dùng, việc xác thực các trường phổ biến và trích xuất các quy tắc xác thực chính xác giúp mã dễ bảo trì và đọc hơn. Bạn có thể làm cho mã mạnh hơn bằng cách sử dụng quy tắc xác thực tùy chỉnh của Laravel với các tham số. Điều này hợp lý hóa luồng giữa logic và mã bất cứ nơi nào được yêu cầu
Laravel cung cấp nhiều quy tắc xác thực thuận tiện khác nhau có thể được áp dụng cho dữ liệu nếu các giá trị dành riêng cho bảng cơ sở dữ liệu. Trong bài viết chuyên sâu này, chúng tôi sẽ trình bày chi tiết tất cả các quy tắc xác thực để giúp bạn làm quen với các tính năng của các quy tắc xác thực này
Bắt đầu xác thực
Để củng cố kiến thức của bạn, hãy xem xét một ví dụ về xác thực biểu mẫu và hiển thị thông báo lỗi cho người dùng. 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
Hãy lấy một ví dụ nơi chúng tôi xác định các tuyến đường sau trong 'tuyến đường/web. tập tin php
use App\Http\Controllers\PostController;
Route::get['/post/create', [PostController::class, 'create']];
Route::post['/post', [PostController::class, 'store']];
Trong đoạn mã trên, route 'GET' sẽ mô tả một biểu mẫu để tạo một bài đăng mới. Lộ trình 'POST' chia sẻ bài đăng mới trong cơ sở dữ liệu
Tạo bộ điều khiển mới
Bây giờ hãy hiểu cách một bộ điều khiển đơn giản xử lý các yêu cầu dữ liệu đến liên quan đến các tuyến đường này
Đôi khi, do cách chúng tôi đặt tên cho các thông số đầu vào hoặc yêu cầu của mình, cuối cùng chúng tôi sẽ hiển thị các thông báo lỗi xác thực không phù hợp và trông không phù hợp với người dùng cuối
Đây là một ví dụ
3namespace App\Http\Controllers\Api;
5use App\Http\Controllers\Controller;
7class CartItemsController extends Controller
12 'qty' => ['required', 'integer', 'min:10'],
13 'productId' => ['required', 'exists:products,id']
Chúng tôi xác thực trường qty
, nhưng chúng tôi đang sử dụng từ viết tắt chứ không phải từ số lượng đầy đủ. Và trong khi điều này được chấp nhận trong mã;
Điều này thậm chí còn tồi tệ hơn khi chúng ta xử lý các tên tham số như productId.
Mặc dù lỗi đầu tiên là khá, nhưng ít nhất thì lỗi thứ hai hơi kỳ lạ. Là người dùng cuối, tôi sẽ mong đợi điều gì đó trong dòng "Sản phẩm không còn nữa. "
Để 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 quy tắc xác thực - giá trị sẽ là thông báo lỗi mà chúng ta muốn
Trong trường hợp quy tắc xác thực `min`, để nhận được giá trị tối thiểu bắt buộc, chúng ta có thể sử dụng tên quy tắc làm trình giữ chỗ `. tối thiểu
3namespace App\Http\Controllers\Api;
5use App\Http\Controllers\Controller;
7class CartItemsController extends Controller
12 'qty' => ['required', 'integer', 'min:10'],
13 'productId' => ['required', 'exists:products,id']
15 'qty.min' => 'The quantity must be at least :min.',
16 'productId.exists' => 'The product is no longer available.'
Và, tất nhiên, chúng ta có thể làm điều tương tự bằng cách sử dụng các đối tượng yêu cầu biểu mẫu. Chỉ có điều bây giờ, mảng thông báo lỗi sẽ được trả về bằng phương thức messages[]
mới được thêm vào
Hôm nay, tôi sẽ cho bạn biết ví dụ về thông báo lỗi tùy chỉnh xác thực của laravel. bạn sẽ tìm hiểu trình xác nhận thông báo lỗi tùy chỉnh của laravel. Trong bài viết này, chúng tôi sẽ triển khai thông báo xác thực tùy chỉnh của laravel trong bộ điều khiển. Bài viết này đi vào chi tiết về các thông báo lỗi tùy chỉnh xác thực biểu mẫu laravel
Ở đây, tôi sẽ chỉ cho bạn ba cách để đặt thông báo lỗi tùy chỉnh với xác thực của laravel. chúng tôi sẽ thêm các thông báo lỗi tùy chỉnh trong ứng dụng laravel 6, laravel 7, laravel 8 và laravel 9. đôi khi chúng ta cần thay đổi thông báo lỗi xác thực laravel mặc định thành thông báo lỗi của chính mình
Vì vậy, hãy xem ba cách dưới đây để thay đổi thông báo lỗi xác thực trong ứng dụng laravel 7
ví dụ 1. Sử dụng tệp ngôn ngữ
ví dụ 2. Trực tiếp trong mã điều khiển
ví dụ 3. Sử dụng Yêu cầu tùy chỉnh
Hãy xem từng ví dụ một
ví dụ 1. Sử dụng tệp ngôn ngữ
Ở điểm đầu tiên, chúng tôi sẽ đặt thông báo tùy chỉnh bằng cách trực tiếp trên laravel đặt tệp mặc định. nhưng nó sẽ thay đổi trong toàn bộ dự án của bạn. Vì vậy, dưới đây tôi đã thêm mã xác thực bộ điều khiển cho mô-đun người dùng của mình như dưới đây
Bộ điều khiển người dùng. php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index[Request $request]
{
$users = User::all[];
return view['users.index', compact['users']];
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store[Request $request]
{
$request->validate[[
'name' => 'required',
'email' => 'required|email|unique:users,email',
'password' => 'required|same:confirm_password'
]];
$input = $request->all[];
$input['password'] = bcrypt[$input['password']];
User::create[$input];
return redirect[route['users.index']];
}
}
Bây giờ tôi muốn thay đổi thông báo lỗi xác thực cho trường "tên", vì vậy hãy mở "xác thực. php" và thay đổi như dưới đây
tài nguyên/lang/vi/xác thực. php
....
'custom' => [
'name' => [
'required' => 'The :attribute field can not be blank value.',
],
],
....
ví dụ 2. Trực tiếp trong mã điều khiển
Trong tùy chọn thứ hai, chúng ta có thể thay đổi trực tiếp từ phương thức điều khiển, tôi nghĩ nếu bạn muốn thực hiện nhanh thì tùy chọn này sẽ hoàn hảo
Bộ điều khiển người dùng. php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index[Request $request]
{
$users = User::all[];
return view['users.index', compact['users']];
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store[Request $request]
{
$request->validate[[
'name' => 'required',
'email' => 'required|email|unique:users,email',
'password' => 'required|same:confirm_password'
],
[ 'name.required' => 'The :attribute field can not be blank value.']];
$input = $request->all[];
$input['password'] = bcrypt[$input['password']];
User::create[$input];
return redirect[route['users.index']];
}
}
ví dụ 3. Sử dụng Yêu cầu tùy chỉnh
Trong tùy chọn thứ ba, chúng tôi phải tạo yêu cầu tùy chỉnh và sau đó bạn có thể sử dụng nó trong bộ điều khiển của mình, phương pháp này là cách tốt hơn của laravel, vì vậy có thể chạy lệnh sau để tạo yêu cầu biểu mẫu người dùng