Yêu cầu thg 5 5, 2020 12:57 SA 162 0 4
  • 162 0 4
+1

Validation trong Laravel

Chia sẻ
  • 162 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 CÂU TRẢ LỜI


Đã trả lời thg 5 5, 2020 2:14 SA
Đã được chấp nhận
+6
  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

Chia sẻ
thg 5 5, 2020 2:26 SA

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

thg 5 5, 2020 2:42 SA

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

Avatar Quiet @simple1805
thg 5 5, 2020 2:43 SA

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

Đã trả lời thg 5 5, 2020 1:03 SA
+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

Chia sẻ
Đã trả lời thg 5 5, 2020 1:00 SA
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

Chia sẻ
thg 5 5, 2020 1:12 SA

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

thg 5 5, 2020 2:14 SA

@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

Đã trả lời thg 5 5, 2020 1:21 SA
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

Chia sẻ
thg 5 5, 2020 1:24 SA

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

thg 5 5, 2020 2:24 SA

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

thg 5 5, 2020 2:24 SA
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí