gpt4 book ai didi

php - 使用 Validator 验证 Laravel 中的用户输入

转载 作者:行者123 更新时间:2023-12-03 21:22:39 25 4
gpt4 key购买 nike

我正在尝试在 Laravel 中使用 RegisterController,但我无法让验证器工作。我不明白问题是什么,因为它应该只需要一个数组并验证它。

当我尝试将带有正确字段的 JSON 发送到注册路由时,出现此错误:

BadMethodCallException: Method validate does not exist. in file /home/deb85528n3/vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php on line 96

下面是我的代码:
protected function validator(array $data)
{
$validator = Validator::make($data,
[
'first_name' => 'required|string|max:255',
'last_name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'birth_year' => 'required|integer',
'lat' => 'required',
'lon' => 'required',
]);

echo $validator->errors();

if ($validator->fails())
{
return response()->json(['errors'=>$validator->errors()]);
}

if ($validator->passes())
{
$response = "validator passed";
return response()->json($response);
}

}

我还尝试以不同的方式使用验证器:
public function validator(Request $request){
$validator = Validator::make($request->all(), [
'first_name' => 'required|string|max:255',
'last_name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'birth_year' => 'required|integer|min:4',
'lat' => 'required|numeric',
'lon' => 'required|numeric',
]);
}

但是后来我收到了这个错误:
Symfony\Component\Debug\Exception\FatalThrowableError: Type error: Argument 1 passed to App\Http\Controllers\Auth\RegisterController::validator() must be an instance of App\Http\Controllers\Auth\Request, array given, called in /home/deb85528n3/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php on line 31 in file /home/deb85528n3/app/Http/Controllers/Auth/RegisterController.php on line 103

编辑以包括整个 RegisterController:
<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{

use RegistersUsers;

/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/home';

/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}

/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
$validator = Validator::make($data, [
'first_name' => 'required|string|max:255',
'last_name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'birth_year' => 'required|integer|min:4',
'lat' => 'required|numeric',
'lon' => 'required|numeric',
]);


echo $validator->errors();

if ($validator->fails())
{
return response()->json(['errors'=>$validator->errors()]);
}

if ($validator->passes())
{
$response = "validator passed";
return response()->json($response);
}
}


/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
//maybe check if facebook login here?
return User::create([
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'birth_year' => $data['birth_year'],
'lat' => $data['lat'],
'lon' => $data['lon'],
]);
}

}

最佳答案

更改您的函数名称

use Validator;

将此添加到您的 Controller 中,

删除这个
public function validator(Request $request){

在模型中编写您的验证规则,如下所示
 public static function rules()
{
return [
'first_name' => 'required|string|max:255',
'last_name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'birth_year' => 'required|integer|min:4',
'lat' => 'required|numeric',
'lon' => 'required|numeric',
];
}

并在您的 Controller 中调用此规则
 $validator = Validator::make($request->all(), "Your model Name"::rules()); 
if ($validator->fails()) {
//throw exception
}

关于php - 使用 Validator 验证 Laravel 中的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50583430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com