2015-09-13 28 views
12

Tôi đang cố gắng đăng các giá trị vào xác thực và trả về phản hồi dưới dạng json thay vì return view như được đưa ra trong tài liệu.Xác nhận Laravel 5 - Trở về như json/ajax

$validator = Validator::make($request->all(), [ 
     'about' => 'min:1' 
    ]); 

    if ($validator->fails()) { 
     return response()->json(['errors' => ?, 'status' => 400], 200); 
    } 

Bài đăng được tạo bởi ajax vì vậy tôi cũng cần nhận được phản hồi trong ajax.

Tôi đã tìm ra rằng để tránh làm mới trang trong phản hồi trả về, tôi phải cung cấp cho nó mã trạng thái 200 bên ngoài mảng. Nhưng tôi không thể tìm ra những gì để cung cấp cho các phần 'errors'. Tôi nên viết gì trong đó?

+1

'phản ứng trở lại() -> json ([ 'lỗi'=> $ validator-> Tin nhắn(), 'tình trạng'=> 400] , 200); '? – aldrin27

+2

Cập nhật nhỏ: Các nguyên tắc REST ngày nay sẽ yêu cầu mã trạng thái '422' được sử dụng. – Peon

Trả lời

18

Bạn có thể sử dụng $validator->messages() trả về một mảng chứa tất cả thông tin về trình xác thực, bao gồm cả lỗi. Hàm json lấy mảng và mã hóa nó thành chuỗi json.

if ($validator->fails()) {  
    return response()->json($validator->messages(), 200); 
} 
+0

Bạn không phải chỉ định 200 error_code, vì 200 là giá trị mặc định. –

+0

Mmm. Tôi nghĩ chúng ta nên đặt mã trạng thái khác hơn 200, 201. Điều gì sẽ xảy ra nếu phía máy khách sử dụng 'axios' (thư viện API Javascript) để xử lý theo lời hứa: D – dphans

+1

Nếu không thành công, bạn nên trả về' 400', vì nó đã làm không thành công. Bạn cũng nên cân nhắc việc sử dụng các hằng số mã phản hồi, chẳng hạn như 'Response :: HTTP_BAD_REQUEST'. Một ví dụ đầy đủ sẽ là: 'return response() -> json ($ validator-> messages(), Response :: HTTP_BAD_REQUEST);' –

1

Trong Laravel 5.4 phương thức validate() có thể tự động phát hiện nếu yêu cầu của bạn là yêu cầu AJAX và gửi phản hồi của trình xác thực cho phù hợp.

Xem tài liệu here

Nếu xác nhận thất bại, một phản ứng chuyển hướng sẽ được tạo ra để gửi cho người dùng trở lại vị trí trước đó của họ. Các lỗi cũng sẽ được chuyển sang phiên để chúng có sẵn để hiển thị. Nếu yêu cầu là yêu cầu AJAX, phản hồi HTTP có mã trạng thái 422 sẽ được trả lại cho người dùng bao gồm biểu diễn JSON về lỗi xác thực.

Vì vậy, bạn chỉ có thể làm như sau:

Validator::make($request->all(), [ 
    'about' => 'min:1' 
])->validate(); 
Các vấn đề liên quan