Проверка ввода пользователя в Laravel с использованием Validator - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь использовать RegisterController в Laravel, но я не могу заставить Валидатор работать.Я не понимаю, в чем проблема, потому что он должен просто взять массив и проверить его.

Когда я пытаюсь отправить 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'],
    ]);
}

}

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

измените имя своей функции

use Validator;

добавьте это в свой контроллер,

удалите это

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',
       ];
     }

и вызовите это правило в вашем контроллере

 $validator = Validator::make($request->all(), "Your model Name"::rules()); 
  if ($validator->fails()) {
        //throw exception
    }
0 голосов
/ 29 мая 2018

Метод register вызывает метод validator и проходит через массив, затем ожидает, что будет возвращен экземпляр \Illuminate\Contracts\Validation\Validator.

Если вам не нужно переопределить ответы по умолчаниюдля регистрации пользователя вы должны иметь:

public function validator(array $data)
{
    return 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',
    ]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...