2016-05-09 5 views
0

Так у меня есть Laravel:AngularJS + Laravel 5 Запрос возвращает Неопределенное

Контроллер:

public function store(CreateRoomRequest $request) 
{ 
    //Code 
} 

CreateRoomRequest:

class CreateRoomRequest extends Request 
{ 
/** 
* Determine if the user is authorized to make this request. 
* 
* @return bool 
*/ 

public function authorize() 
{ 
    return true; 
} 

/** 
* Get the validation rules that apply to the request. 
* 
* @return array 
*/ 

public function rules() 
{ 
    return [ 
     'name' => 'required|unique:rooms|max:255', 
     'short_description' => 'required', 
     'long_room' => '', 
     'long_other' => '', 
     'long_houserules' => '', 
     'long_neighbourhood' => '', 
     'long_transportation' => '', 
     'image' => '', 
     'street' => 'required', 
     'streetnumber' => 'required|numeric|max:5', 
     'city' => 'required', 
     'postalcode' => 'required|numeric|max:4', 
     'roomnumber' => 'required', 
     'type' => 'required|in:kamer,studio,loft, appartement, huis, villa, camper, boomhut, hut, trein, boot, tent, slaapzaal, zolder, overige', 
     'link' => '', 
     'latitude' => 'required', 
     'longitude' => 'required', 
     'ranking' => 'numeric' 
    ]; 
} 

/** 
* Return validation messages that apply to the request. 
* 
* @return array 
*/ 
public function messages() 
{ 
    return [ 
     'name.required' => 'Gelieve een advertentienaam in te vullen.', 
     'name.unique' => 'Deze advertentienaam bestaat al. Gelieve een unieke advertentienaam in te vullen.', 
     'name.max' => 'De advertentienaam is langer dan 255 tekens. Gelieve een kortere naam in te vullen.', 
     'short_description.required' => 'Gelieve een description in te vullen.', 
     'street.required' => 'Gelieve een straat in te vullen.', 
     'streetnumber.required' => 'Gelieve u huisnummer in te vullen', 
     'city.required' => 'Gelieve u stad in te vullen', 
     'postalcode.required' => 'Gelieve u postcode in te vullen', 
     'roomnumber.required' => 'Gelieve een kamernummer in te vullen.', 
     'type.required' => 'Gelieve het type ruimte te specifiëren.', 
     'type.in' => 'Het opgegeven type kamer is niet correct. Gelieve een geldig type te selecteren.', 
     'latitude.required' => 'De opgegeven locatie kon niet gevonden worden. Gelieve een geldige locatie op te geven.', 
     'longitude.required' => 'De opgegeven locatie kon niet gevonden worden. Gelieve een geldige locatie op te geven.' 
    ]; 
} 
} 

И в моем Laravel У меня есть следующие службы (после Johnpapa):

 function createRoom(roomCreateData) { 
     console.log(roomCreateData); 
     return $http({ 
      method: 'POST', 
      url: 'api/rooms', 
      headers: { 'Content-Type' : 'application/x-www-form-urlencoded' }, 
      data: $.param(roomCreateData) 
     }).then(createRoomSuccess).catch(createRoomError); 

     function createRoomSuccess(response) { 
      $log.info('Creating room success: ' + response); 
      return response; 
     } 

     function createRoomError(error) { 
      $log.info('Creating room failed because: ' + error); 
      return error; 
     } 
    } 

Без проверки. Все работает (хранение, ...). Но когда я хочу проверить свои данные с помощью CreateRoomRequest при ошибке проверки, я получаю следующее:

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

Laravel документы состояние:..

Если проверка не пройдена, ответ редирект будет генерироваться для отправки пользователю обратно к их предыдущему местоположению. Ошибки также будут мигать к сеансу, чтобы они были доступны для отображения. Если запрос был запросом AJAX, ответ HTTP с кодом статуса 422 будет возвращен пользователю, включая представление ошибок проверки правильности JSON.

Теперь мой вопрос: где возвращение JSON?

Пс: Я также попытался удалить мои сообщения об ошибках, тот же результат.

Заранее спасибо

ответ

1

The 422 является правильным ответом на это. Я думаю, что то, что вам не хватает, это то, что происходит, так это то, что он вызывает часть вашего кода, а фактический response object должен иметь некоторые мутации, применяемые (в частности, захват свойства responseJSON), чтобы вы могли получить информацию о том, что вы хотите.

var errors = error.responseJSON; 

Если responseJSON свойства не доступно, то вам, возможно, придется вручную разобрать responseText

var errors = JSON.parse(error.responseText); 

Теперь errors будет iteratable в традиционной манере, и вы можете получить error сообщений во время цикла ,

for(var prop in errors){ 
    // errors[prop] has what you want now. 
} 

Надеюсь, это прояснит ситуацию.

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