Cấu hìnhBackend Validation với RESTAdapter luôn "Các bộ chuyển đổi từ chối cam kết bởi vì nó không hợp lệ"
- Backend = Laravel 5.1, với Dingo API
- Frontend = Ember 1.13.6, Ember liệu 1,13. 7
- Adaptor = Ember liệu RESTAdapter
vấn đề
Tôi đang cố gắng xử lý lỗi xác thực phụ trợ trên ứng dụng Ember đầu tiên của mình. Khi lỗi được trả về từ máy chủ, tôi nhận được lỗi này:
Error: The adapter rejected the commit because it was invalid
at new Error (native)
at Error.EmberError (http://localhost:4200/assets/vendor.js:26266:21)
at Error.ember$data$lib$adapters$errors$$AdapterError (http://localhost:4200/assets/vendor.js:69564:50)
at Error.ember$data$lib$adapters$errors$$InvalidError (http://localhost:4200/assets/vendor.js:69637:52)
at ajaxError (http://localhost:4200/assets/frontend.js:16:24)
at ember$data$lib$system$adapter$$default.extend.ajax.Ember.RSVP.Promise.hash.error (http://localhost:4200/assets/vendor.js:71327:31)
at jQuery.Callbacks.fire (http://localhost:4200/assets/vendor.js:3350:30)
at Object.jQuery.Callbacks.self.fireWith [as rejectWith] (http://localhost:4200/assets/vendor.js:3462:7)
at done (http://localhost:4200/assets/vendor.js:9518:14)
at XMLHttpRequest.jQuery.ajaxTransport.options.send.callback (http://localhost:4200/assets/vendor.js:9920:8)
Các phản hồi từ backend có một tiêu đề 422 Không thể xử Entity, và nội dung là:
{
"message":"Couldn't save client",
"errors":{
"name":["The name field is required."],
"email":["The email field is required."]
},
"status_code":422
}
Cố gắng (và thất bại) giải pháp
Ember data Rest adapter error handling not working
Mở rộng RESTAdapter để o verride chức năng ajaxError, mỏ hiện trông như thế này:ajaxError: function(jqXHR) { var error = this._super(jqXHR); if (jqXHR && jqXHR.status === 422) { var jsonErrors = Ember.$.parseJSON(jqXHR.responseText).errors; return new DS.InvalidError(jsonErrors); } else { return error; } }
Thêm một lệnh catch với phương pháp tiết kiệm, tôi lưu hành động hiện là:
save() { var self = this; function transitionToPost(post) { self.transitionToRoute('clients.show', post); } function failure(reason) { // handle the error console.log(reason); return false; } this.get('model').save().then(transitionToPost, failure).catch(failure); }
Testing ra ActiveModelAdapter - không chắc chắn những gì Tôi đã mong đợi để đạt được điều này, nhưng tôi đã tuyệt vọng; kết quả vẫn như cũ.
Ember Documents (http://guides.emberjs.com/v1.13.0/models/creating-updating-and-deleting-records/#toc_promises)
Như bạn thấy trong mã điều khiển của tôi ở trên, tôi thực sự sử dụng điều này như một cơ sở
Xin vui lòng bạn có thể có một cái nhìn và tư vấn? Cảm ơn trước sự giúp đỡ nào!
OK, vì vậy tôi đã gỡ cài đặt dữ liệu ember và cài đặt lại và sau đó mọi thứ bắt đầu hoạt động bình thường! – AshleyVee