Вызов функции-члена fails () для массива - PullRequest
2 голосов
/ 29 апреля 2019

У меня проблема с проверкой laravel.

Сбой вызова функции-члена () в массиве

Symfony \ Component \ Debug \ Exception \ FatalThrowableError, выдаваемой с сообщением "Сбой вызова функции-члена () для массива "

Stacktrace:

` # 0 Symfony \ Component \ Debug \ Exception \ FatalThrowableError в 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();
    }
}

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Ошибка в том, что метод ->validate() возвращает array с проверенными данными при применении к классу Request.С другой стороны, вы используете метод ->fails(), который используется при создании валидаторов вручную.

Из документации :

Создание вручнуюВалидаторы

Если вы не хотите использовать метод validate в запросе, вы можете создать экземпляр валидатора вручную, используя фасад Validator.Метод 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...
    }
}

->fails() вызывается в ответе метода Validator::make([...]), который возвращает экземпляр Validator.Этот класс имеет метод fails(), который будет использоваться при попытке обработать ответ об ошибке вручную.

С другой стороны, если вы используете метод validate() для объекта $request, результатом будетмассив, содержащий проверенные данные в случае, если проверка прошла успешно, или она обработает ошибку и добавит подробности ошибки в ваш ответ, которые будут отображаться в вашем представлении, например:

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

       // I passed!

     }

Laravel обработает ошибку проверкиавтоматически:

Как видите, мы передаем нужные правила проверки в метод validate.Опять же, если проверка не пройдена, автоматически генерируется правильный ответ.Если проверка пройдена, наш контроллер продолжит нормально работать.

0 голосов
/ 30 апреля 2019

Эта ошибка говорит вам о том, что, делая $query->fails, вы вызываете метод fails() для чего-то (т.е. $query), который является не объектом, а массивом. Как указано в документации $this->validate() возвращает массив ошибок.

Мне кажется, вы немного смешали пример кода на проверочных хуках с вашим кодом.


Если правила проверки пройдут, ваш код будет работать нормально; однако если проверка не удалась, будет сгенерировано исключение и правильный ответ об ошибке будет автоматически отправлен обратно пользователю. В в случае традиционного HTTP-запроса, ответ перенаправления будет генерируется, [...] - Документы Laravel

Следующий код должен сработать. Тогда вам нужно только отобразить ошибки в вашем представлении. Вы можете прочитать все об этом, как вы уже догадались, в ... документах .

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