首页 > 解决方案 > Laravel 验证调用数组上的成员函数失败()

问题描述

我正在制作一个只能使用某些值的表格。但是,每当输入正确答案时,它的返回值和数组都会有人知道我是否可以这样做,或者我是否必须更改太多东西

$validator = $request->validate([
    'wattage' => ['required', new CertainValue()]
]);

if ($validator->fails()) {
    Log::error('validatiefout:', $request->all());
    
    return redirect('/test');
}

确定值规则(使用 App\Rules\CertainValue;)

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class CertainValue implements Rule
{
    public function __construct()
    {
        //
    }

    public function passes($attribute, $value)
    {
        if ($value === "5") {
            return true;
        } else {
            return false;
        }
    }

    public function message()
    {
        return 'The validation error message.';
    }
}

Blade.php 中的错误代码(修复后我不会在 ul 中恢复错误)

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

标签: laravelvalidation

解决方案


如果你想控制验证失败时发生的事情,你不能使用$request->validate(),因为它会在验证失败时抛出异常并自动返回,如果验证通过$request->validate()将从请求中返回经过验证的数据而不是Validator实例,所以你必须手动Validator如果您想重定向自己,请创建。

文档

如果你不想在请求上使用 validate 方法,你可以使用 Validator 门面手动创建一个验证器实例。门面的 make 方法生成一个新的验证器实例:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

    if ($validator->fails()) {
        return redirect('post/create')
                    ->withErrors($validator)
                    ->withInput();
    }

    // Store the blog post...
}

所以在你的情况下,它会是这样的:

use Illuminate\Support\Facades\Validator;

$validator = Validator::make(
    $request->all(),
    ['wattage' => ['required', new CertainValue]]
);

if ($validator->fails()) {
    Log::error('validatiefout:', $request->all());

    return redirect('/test')
        ->withErrors($validator)
        ->withInput();
}

推荐阅读