2013-06-16 2 views
1

В настоящее время я просто тестирую laravel 4, но у меня есть проблема, в сообщениях о возврате сообщений larvel docs описано так: $messages->first('email'); должен вернуть сообщение, но независимо от того, какой метод следует использовать на messages я получаю ошибкуlaravel 4 return error message error

мой cobtroller

public function postSignup() 
    { 
     $rules = array(
      'display_name'  => 'required|unique:users', 
     ); 

     $messages = array(
      'display_name.required' => 'Felhasználónév kötelező', 
      'display_name.unique' => 'Ez a Felhasználónév foglalt', 
     ); 

     $val = Validator::make(Input::all(), $rules, $messages); 

     if ($val->passes()) 
     { 
      $data = array('msg' => 'yay'); 
     } 
     else 
     { 
      print_r($messages->first('display_name')); 
     } 

     return Response::json($data); 
    } 

{ "ошибка": {"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Call to a member function first() on a non-object"

если я попробовать с all только для теста print_r ($ messages-> все()); im получение следующих

{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Call to a member function all() on a non-object" 

может понравиться кому-то указать, что я делаю неправильно?

ответ

3

Вы можете попробовать этот

if ($val->passes()) 
{ 
    $data = array('msg' => 'yay'); 
} 
else 
{ 
    $messages = $validator->messages(); 
    $data = array('msg' => $messages->first('display_name')); 
} 
return Response::json($data); 

print_r(...); в controller напечатает вывода вне шаблона. На стороне клиента вы можете проверить msg что-то вроде этого (с помощью jQuery, например)

$.get('url', function(data){ 
    if(data.msg == 'yay') 
    { 
     // success 
    } 
    else 
    { 
     // failed, so data.msg contains the first error message 
    } 
}); 
+0

благодарю вас за помощь, я был смущен, используя L4 после L3 немного –

+0

@WebStudent, вас больше всего приветствуют :-) –

0

Validator :: make метод допускает только два аргумента.

+1

Нет, 'Validator :: make' метод принимает три аргумента. Третий вариант является необязательным. –

0

Вы получаете доступ к массиву сообщений, который вы передали в валидатор, а не к сообщениям об ошибках, которые создал валидатор. Измените код следующим образом:

$val->messages()->first('email') 

Примечание: Метод валидатор :: Марка принимает 3 аргумента:

/** 
* Create a new Validator instance. 
* 
* @param array $data 
* @param array $rules 
* @param array $messages 
* @return \Illuminate\Validation\Validator 
*/ 
public function make(array $data, array $rules, array $messages = array())