2015-11-09 3 views
0

Я сделал регистрационную форму с большим количеством полей. Поскольку, когда я отправляю данные, а валидатор перенаправляет обратно с ошибками, некоторые входы пустые, и пользователь должен потерять время, заправляя их, я хочу реализовать некоторые проверки переднего плана. Я застрял в проверке, если имя пользователя уже используется при отправке кнопки, нажмите becasuse. Я не эксперт в AJAX.Laravel - Проверьте, существует ли имя пользователя перед отправкой формы с помощью jQuery AJAX

В AuthController я создал функцию, которая возвращает Json, содержащий ответ в связи с существованием или отсутствием имени пользователя в базе данных.

class UserAuthController extends Controller 
{ 
    public function isUserNameInUse($username) 
    { 
     if (Auth::where('username', $username) != null){ 
      return [ 'is_used' => 1 ]; 
     } 

      return [ 'is_used' => 0 ]; 
    } 
} 

В routes.php есть такие строки:

Route::group([ 'as' => 'api', 'prefix' => 'api', 'namespace' => 'Api'], function() { 

    Route::group([ 'as' => 'auth', 'prefix' => 'auth'], function() { 
      Route::any('/is_username_in_use/{username}', [ 
      'as' => 'isUserNameInUse', 
      'uses' => '[email protected]']); 


    }); 

}); 

мнение, как, что (только часть формы):

<form action="{{ route('web.company.postSignup') }}" method="post" id="signup-form" class="form-horizontal"> 
      {!! csrf_field() !!} 
      @include('errors.handler') 

          <label for="username"> 
           {{ _('Username*') }} </label> 
          <input type="text" class="form-control" name="username" id="username" 
            value="{{ Input::old('username') }}" required> 

          <label for="password"> 
           {{ _('Password*') }} 
          </label> 

          <input type="password" class="form-control" name="password" id="password" 
            value="{{ Input::old('password') }}" onchange="form.confirmPassword.pattern = this.value;" 
            required> 

          <label for="confirmPassword"> 
           {{ _('Confirm Password*') }} 
          </label> 

          <input type="password" class="form-control" name="confirmPassword" id="confirmPassword" required> 
          <button class="btn btn-warning" id="submit-btn" type="submit">{{ _('Sign Up') }}</button> 

</form> 

Это сценарий, пока я только пытался зарегистрировать ответ контроллера, но он печатает что угодно.

$(document).ready(function() { 
    $('form#signup-form').submit(function() { 
     var input_username = $('input[name=username]').val(); 
     console.log(input_username); 

     $.getJSON('/api/auth/is_username_in_use/' + input_username, function (json) { 

      console.log(json); 


      }); 
      return false; 
     }); 

    }); 
+0

Laravel не является PHP. PHP используется в Laravel. –

+0

@ 3.14159265358 ... Laravel - это PHP-фреймворк, клинок - это шаблонный движок (известный как препроцессор php), используемый с laravel. Я не уверен, что вы думаете. –

+0

Вероятно, есть встроенный способ сделать это в Laravel, но вы должны хранить переменные формы в запросе и автоматически пополнять форму, когда страница перезагружается. –

ответ

2

Вы должны изменить return [ 'is_used' => 0 ]; в return Response::json([ 'is_used' => 0 ]); и добавить use Response; в верхней части контроллера.

1

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

Примером этого может быть

public function store(Request $request) 
{ 
    $this->validate($request, [ 
     'username' => 'required|unique:users', 
     'password' => 'required|confirmed' 
    ]); 

    // process your logic 
} 

Таким образом, если проверка не удалась, вы получите объект ответа JSON, содержащий сообщения об ошибках.


Примечание. Это будет работать, если вы находитесь на Laravel 5. Если вы находитесь на 4.*refer to documentation для части проверки.

Смежные вопросы