Коды ответов и сообщения Laravel

#php #laravel #validation #twitter-bootstrap-3

#php #laravel #проверка #twitter-bootstrap-3

Вопрос:

Я использую Laravel 5.3 и https://github.com/1000hz/bootstrap-validator

Я проверяю электронную почту пользователей по своей базе данных в Laravel, чтобы проверить, используется ли электронная почта или нет.

В документах по валидатору начальной загрузки указано возвращать 200, если адрес электронной почты в порядке (т.Е. Не существует), и возвращать ошибку 4xx, если она существует.

В моей функции Laravel я делаю следующее :

 public function check_email(Request $request)
{
    // Email Address
    $email = User::where('email', $request->input('email'))
            ->take(1)
            ->get();

    $email = $email->toArray();

    if(empty($email))
    {
        return response()->json(['Email Not Taken'], 200);
    }
    else
    {
        return response()->json(['Email In Use'], 400);
    }
}
  

Теперь, когда я запускаю средство проверки, оно не отображает сообщение. Это потому, что Laravel строже относится к своим кодам ответов? Или я просто делаю что-то не так?

Мой HTML-код выглядит следующим образом :

 <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
                                    <input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" placeholder="Email" data-remote="/validate-email" data-error="Please enter your Email Address" required="required">
                                    @if ($errors->has('email'))
                                        <span class="help-block">
                                            <strong>{{ $errors->first('email') }}</strong>
                                         </span><!-- /.help-block -->
                                    @endif
                                    <span class="glyphicon form-control-feedback" aria-hidden="true"></span>
                                    <div class="help-block with-errors"></div>
                            </div><!-- /.form-group -->
  

Как мне настроить ответ 4xx с сообщением в Larvel 5.3?

Спасибо

Ответ №1:

Вы должны выполнить проверку либо в своем контроллере, либо создать класс запроса

https://laravel.com/docs/5.3/validation

 public function check_email(Request $request)
{
    //validate 
    $this->validate($request, [
        'email' => 'required|unique:users',
    ]);

    // Email Address
    $email = User::where('email', $request->input('email'))
            ->take(1)
            ->get();
}
  

Ответ №2:

Во-первых, не проверяйте, существует ли пользователь с помощью запроса, используя класс validator Laravel https://laravel.com/docs/5.3/validation он уже выполнил эту работу за вас, см.: https://laravel.com/docs/5.3/validation#rule-unique

Во-вторых, ознакомьтесь с этой библиотекой, которая в значительной степени делает то, что вам уже нужно: https://github.com/proengsoft/laravel-jsvalidation