Validation trong Laravel
Chào mọi người,em đang làm chuyển tiền giữa các tài khoản,hiện em đang gặp 1 vấn đề về validation là khi người chuyển tiền nhập số tiền thì không được lớn hơn số tiền hiện có trong ví,a/c nào có thể giúp em được không ạ,em xin cảm ơn ạ
4 CÂU TRẢ LỜI
- Tạo 1 rule để validate số tiền trong ví và trong DB
php artisan make:rule CheckMaxMoney
Trong class CheckMaxMoney ở thư mục app/rule
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class CheckMaxMoney implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
$money = Lấy dữ liệu money của người dùng trong DB;
if($value < $money) {
return true; // Pass validate
}
return false; // Không pass validate
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Số tiền trong ví nhỏ hơn số tiền chuyển .';
}
}
- Tạo 1 form validate để khi có request chuyển tiền
php artisan make:request TransactionRequest
Trong class TransactionRequest xử lí
<?php
namespace App\Http\Requests\Form;
use Illuminate\Foundation\Http\FormRequest;
use App\Rule\CheckMaxMoney;
class TransactionRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'monney' => new CheckMaxMoney($this->money)
];
}
}
Có thể idea đến triển khai sẽ gặp vài lỗi nhưng tư tưởng là vậy. Chúc bạn may mắn, mà chắc bạn đang dùng laravel nhỉ :3
Tham khảo thêm : https://laravel.com/docs/7.x/validation#using-rule-objects
cách này dễ hiểu này
tks anh,em làm được rồi ạ
@khanh1234 Viblo có nút approved câu trả lời đó. Bạn tích vào nút đó để mọi người biết vấn đề đã được giải quyết nhé.
Nếu bạn muốn dùng laravel thì có thể so sáng số tiền người ta gửi lên và số tiền trong ví, nếu không thỏa mãn thì return về lỗi. Hoặc bạn có thể sử dụng validate theo cách này: https://laracasts.com/discuss/channels/laravel/how-to-pass-variable-in-validation-rule
cái này thì bạn so sánh số tiền người ta nhập vào form với số tiền đang có trong ví thôi, đâu có khó gì đâu
tại vì số tiền trong ví hay thay đổi bạn ạ,
@khanh1234 mình nghĩ bạn nên show code ra xem đang lỗi ở đoạn nào, framework hay ngôn ngữ đang dùng là gì, cần yêu cầu đầu ra thế nào để mọi người dễ support hơn
Bạn có thể thử truyền biến vào max:$sốDưVí giống như trong bài này xem sao https://stackoverflow.com/questions/31703964/laravel-validation-rule-maxvalue-not-working-with-variables
{$available} biến này thì mk khai báo như nào ạ,vd số tiền của em trong ví trường dữ liệu là money
@khanh1234 như trong bài này thì họ dùng $request->merge để truyền biến vào, bạn dùng thử xem sao
merge $available with the input fields of my request before validation using “ $request->merge(['availableCount' =>$availableRoom->count]);