如何在 Laravel 中创建只接受特定数字的自定义验证规则?

问题描述 投票:0回答:1

如何设置自定义验证规则仅接受输入文本中的 1.00、1.25、1.50、1.75、2.00、2.25、2.50、2.75 和 3.00gradesgrades1 是我的输入。

1.35 应该无效(如果你正在考虑能被 5 整除的解)
1.26应该无效

表格请求

public function rules()
{
    return [
        'user_id' => 'required',
        'app_id' => 'nullable',
        'subjects.*' => 'required|string',
        'subjects1.*' => 'required|string',
        'school_year' => 'required',
        'grades.*' => ['required','numeric','lt:2.50'],
        'grades1.*' => 'required|lt:2.50',
        'units.*' => 'required|integer|min:1',
        'units1.*' => 'required|integer|min:1',
        'term' => 'required',
        'term1' => 'required',
        'total.*' => 'nullable',
        'total1.*' => 'nullable',
        'gwa_1st' => 'required|lte:1.75',
        'gwa_2nd' => 'required|lte:1.75',
        'year_level' => 'required|string',
        'image' => 'required|mimes:jpeg,png,jpg',
        'award_applied' => 'required|string',
        'course_id' => 'required|string'
    ];
}

控制器

public function store(AchieversAwardRequest $request)
{

    $data = $request->validated();
    $award = new StudentApplicants();

    $award->user_id = $data['user_id'];
    $award->school_year = $data['school_year'];
    $award->gwa_1st = $data['gwa_1st'];
    $award->gwa_2nd = $data['gwa_2nd'];
    $award->year_level = $data['year_level'];

    if ($request->hasfile('image')) {
        $file = $request->file('image');
        $filename = time() . '.' . $file->getClientOriginalExtension();
        $file->move('uploads/', $filename);
        $award->image = $filename;
    }

    $award->award_applied = $data['award_applied'];
    $award->course_id = $data['course_id'];
    $award->save();
    $lastid = $award->id;
  }
php laravel laravel-validation
1个回答
2
投票

一种可能的解决方案是使用

in
验证规则,如下所示:

$acceptable = [1.00, 1.25, 1.5, 2.75, 3.00];

$validator = Validator::make(['numbers_field' => 2.75], [
    'numbers_field' => [Rule::in($acceptable)]
]);

更新

将该规则与所有其他规则一起添加到您的

AchieversAwardRequest
自定义
FormRequest
rules()
方法中:

public function rules()
{
    return [
        'user_id' => 'required',
        'app_id' => 'nullable',
        'subjects.*' => 'required|string',
        'subjects1.*' => 'required|string',
        'school_year' => 'required',
        'grades.*' => ['required','numeric','lt:2.50'],
        'grades1.*' => 'required|lt:2.50',
        'units.*' => 'required|integer|min:1',
        'units1.*' => 'required|integer|min:1',
        'term' => 'required',
        'term1' => 'required',
        'total.*' => 'nullable',
        'total1.*' => 'nullable',
        'gwa_1st' => 'required|lte:1.75',
        'gwa_2nd' => 'required|lte:1.75',
        'year_level' => 'required|string',
        'image' => 'required|mimes:jpeg,png,jpg',
        'award_applied' => 'required|string',
        'course_id' => 'required|string'

        'field_name' => [Rule::in([1.00, 1.25, 1.5, 2.75, 3.00])]
    ];
}

显然,将

field_name
替换为您的
input
字段的名称。您还需要在
use Illuminate\Validation\Rule;
的顶部添加
AchieversAwardRequest

© www.soinside.com 2019 - 2024. All rights reserved.