Asked May 5th, 2020 12:57 AM 145 0 4
  • 145 0 4
+1

Validation trong Laravel

Share
  • 145 0 4

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 ANSWERS


Answered May 5th, 2020 2:14 AM
Accepted
+5
  1. 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  .';
    }

}
  1. 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

Share
May 5th, 2020 2:26 AM

cách này dễ hiểu này 👍

0
| Reply
Share
May 5th, 2020 2:42 AM

tks anh,em làm được rồi ạ

+1
| Reply
Share
Quiet @simple1805
May 5th, 2020 2:43 AM

@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é.

+1
| Reply
Share
Answered May 5th, 2020 1:03 AM
+1

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

Share
Answered May 5th, 2020 1:00 AM
0

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

Share
May 5th, 2020 1:12 AM

tại vì số tiền trong ví hay thay đổi bạn ạ,

0
| Reply
Share
May 5th, 2020 2:14 AM

@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

-1
| Reply
Share
Answered May 5th, 2020 1:21 AM
0

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

Share
May 5th, 2020 1:24 AM

{$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

0
| Reply
Share
May 5th, 2020 2:24 AM

@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]);

0
| Reply
Share
May 5th, 2020 2:24 AM