2016-02-18 2 views
0

Я использую плагин проверки jQuery для проверки имени пользователя уже существующего или нет.Laravel 5.2 и проверка jQuery: попытка получить свойство Non-Object

Документирование плагин проверки говорит:

The serverside resource is called via jQuery.ajax (XMLHttpRequest) and gets a key/value pair corresponding to the name of the validated element and its value as a GET parameter. The serverside response must be a JSON string that must be "true" for valid elements, and can be "false", undefined, or null for invalid elements, using the default error message. If the serverside response is a string, eg. "That name is already taken, try peter123 instead", this string will be displayed as a custom error message in place of the default.

Laravel контроллер:

public function verifyName(Request $request) 
{ 
    $username = $request->input('name', ''); 
    $user = User::where('name', $username)->first(); 
    if ($username == $user->name) { 
     return json_encode(false); 
    }else{ 
     return json_encode(true); 
    } 
} 

JavaScript:

<script> 
    $(function() { 
     $.ajaxSetup({ 
      headers: { 
       'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
      } 
     }); 
     $("#register").validate({ 
      rules: { 
       name: { 
        required: true, 
        rangelength: [4, 30], 
        remote: { 
         url: "{{ url('services/validation/verify_name') }}", 
         type: "post" 
        } 
       } 
      }, 
      errorClass: "has-danger", 
      validClass: "has-success", 
      //success: "valid", 

      highlight: function (element, errorClass) { 
       $(element).fadeOut(function() { 
        $(element).fadeIn(); 
       }); 
       $(element).closest(".form-group").addClass(errorClass); 
      }, 
      unhighlight: function (element, errorClass) { 
       $(element).closest(".form-group").removeClass(errorClass); 
      }, 
      errorPlacement: function (error, element) { 
       error.insertAfter(element); 
      } 
     }); 
    }); 
</script> 

Вопрос:

Когда return false, он работает, но когда return true, есть ошибка: «Попытка получить имущество не-объект», я не знаю, почему.

+0

'var_dump' объекта' $ user' и посмотреть, какой класс он принадлежит. –

ответ

1

Если у вас нет записи пользователя с данным кодом $username, тогда ваша $user будет null. Если $user: null, при попытке доступа к $user->name в вашем операторе if вы получите сообщение об ошибке "Trying to get property of non-object".

Вы хотите сделать что-то вроде этого:

public function verifyName(Request $request) 
{ 
    $username = $request->input('name', ''); 
    $user = User::where('name', $username)->first(); 

    // if the user was found, this will be true; 
    // if the user wasn't found, $user will be null and this will be false 
    if ($user) { 
     return json_encode(false); 
    } else { 
     return json_encode(true); 
    } 
} 
Смежные вопросы