在数组上调用成员函数 failed()

Lui*_*iiz 5 php laravel

我的 Laravel 验证有问题。

在数组上调用成员函数 failed()

Symfony\Component\Debug\Exception\FatalThrowableError 抛出消息“调用成员函数失败()在数组上”

堆栈跟踪:

`#0 Symfony\Component\Debug\Exception\FatalThrowableError in C:\laragon\www\frontine\app\Http\Controllers\authController.php:37

public function postRegister(Request $request)
{
    $query = $this->validate($request, [
        'user' => 'string|required|unique:users|min:4|max:24',
        'email' => 'email|string|required|unique:users',
        'pass' => 'string|required|min:8',
        'cpass' => 'string|required|min:8|same:pass',
        'avatar' => 'image|mimes:jpeg,jpg,png|max:2048',
    ]);

    if ($query->fails())
    {
        return redirect('/registrar')
            ->withErrors($query)
            ->withInput();
    }
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*rna 7

错误是因为该->validate()方法array在应用于Request类时返回带有经过验证的数据的内容。另一方面,您正在使用->fails()手动创建验证器时使用的方法。

文档

手动创建验证器

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

use Validator; // <------
use Illuminate\Http\Request;

class PostController extends Controller
{
    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...
    }
}
Run Code Online (Sandbox Code Playgroud)

->fails()被称为在响应Validator::make([...])返回的方法Validator实例。fails()当您尝试手动处理错误响应时,此类具有要使用的方法。

另一方面,如果您validate()$request对象上使用该方法,则结果将是一个包含验证数据的数组,以防验证通过,或者它将处理错误并将错误详细信息添加到您的响应中以显示在您的视图中例子:

    public function store(Request $request)
    {
       $validatedData = $request->validate([
            'attribute' => 'your|rules',
        ]);

       // I passed!

     }
Run Code Online (Sandbox Code Playgroud)

Laravel 会自动处理验证错误:

如您所见,我们将所需的验证规则传递给了 validate 方法。同样,如果验证失败,将自动生成正确的响应。如果验证通过,我们的控制器将继续正常执行。