Trả về lỗi xác thực Laravel json
CẬP NHẬT ngày 10 tháng 6 năm 2019. Tôi đã đăng bài viết này trên kênh Slack của LaravelUK và David T đã cho tôi một số phản hồi có giá trị Show
Bạn có thể buộc Laravel luôn chỉ trả về JSON bằng cách chỉ định tiêu đề Chấp nhận. Gần đây tôi đã sử dụng thay vì sử dụng xác thực nội tuyến. Tôi thấy việc tách mọi thứ thành các lớp riêng của chúng càng nhiều càng tốt nên tôi rất hài lòng khi điều này được đưa vào khung cốt lõi Nếu bạn giống tôi và bạn không thể bỏ thói quen viết xác thực nội tuyến thì đừng lo lắng vì Jason McCreary tuyệt vời đã thêm một tính năng tuyệt vời vào Laravel Code Fixer Shift để chuyển đổi xác thực bộ điều khiển nội tuyến thành Yêu cầu biểu mẫu Khi sử dụng Yêu cầu biểu mẫu với API, bạn sẽ nhận thấy rằng nếu bạn nhấn vào một tuyến API mà quá trình xác thực không thành công, nó sẽ đưa bạn đến chế độ xem 404 Giải pháp của tôi là tạo lớp Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn. Tìm hiểu thêm về các ký tự Unicode hai chiều Hiển thị ký tự ẩn không gian tênỨng dụng\Http** @return mảng*/trừu tượng** @return bool*/trừu tượng** @param \Illuminate\Contracts\Validation\Validator $validator* @return void< . HTTP_UNPROCESSABLE_ENTITY));}}namespace App\Http\Requests\Api;use Illuminate\Http\JsonResponse;use Illuminate\Contracts\Validation\Validator;use Illuminate\Validation\ValidationException;use Illuminate\Http\Exceptions\HttpResponseException;use Illuminate\Foundation\Http\FormRequest as LaravelFormRequest;abstract class FormRequest extends LaravelFormRequest{/*** Get the validation rules that apply to the request.** @return array*/abstract public function rules();/*** Determine if the user is authorized to make this request.** @return bool*/abstract public function authorize();/*** Handle a failed validation attempt.** @param \Illuminate\Contracts\Validation\Validator $validator* @return void** @throws \Illuminate\Validation\ValidationException*/protected function failedValidation(Validator $validator){$errors = (new ValidationException($validator))->errors();throw new HttpResponseException(response()->json(['errors' => $errors], JsonResponse::HTTP_UNPROCESSABLE_ENTITY));}}xem raw được lưu trữ với ❤ bởi GitHub Vì vậy, Chúng tôi chỉ cập nhật Các lớp yêu cầu tài nguyên của chúng tôi cho phép bạn xác thực JSON. Tài liệu API do khách hàng gửi dựa trên các quy tắc xác thực dành riêng cho ứng dụng của bạn. Bạn cũng có thể xác định quy tắc xác thực để xác định xem có thể xóa tài nguyên hay không Đối với bất kỳ loại tài nguyên nào mà bạn cho phép tạo và/hoặc cập nhật (bao gồm cập nhật các mối quan hệ), bạn sẽ cần tạo một lớp yêu cầu tài nguyên. Để tạo yêu cầu tài nguyên, hãy sử dụng lệnh Artisan Điều này sẽ tạo ra lớp yêu cầu sau. ________số 8 TIỀN BOA Tùy chọn Phương pháp xác thựcCác đối tượng tài nguyên được xác thực bằng cách sử dụng. Nếu bất kỳ trường nào không tuân theo các quy tắc xác thực, phản hồi TIỀN BOA Tại sao các quy tắc xác thực không được xác định trên các trường lược đồ, như tài nguyên Nova? Đây là một câu hỏi hay. Mặc dù lúc đầu, các trường lược đồ của chúng tôi triển khai các quy tắc xác thực kiểu Nova (mở cửa sổ mới) có vẻ là một ý tưởng hay, nhưng chúng tôi không tin rằng đây là cách phù hợp để xác thực JSON. Trong khi Nova đang buộc xác thực của nó vào các trường nhập HTML, thì JSON của bạn. Các đối tượng tài nguyên API có thể chứa các cấu trúc phức tạp, chẳng hạn như mảng và các đối tượng JSON lồng nhau Điều này làm cho việc đính kèm các quy tắc xác thực vào các trường cụ thể trở nên phức tạp hơn nhiều, do đó, chúng tôi đã chọn cách xác định quy tắc đơn giản bằng cách sử dụng phương pháp tiếp cận Dữ liệu xác thựcTạo tài nguyênTrình xác thực được cung cấp cùng với trình xác thực do khách hàng gửi. Nói chung đây là Điều này được minh họa tốt nhất với một ví dụ. Đưa ra yêu cầu này Trình xác thực của bạn sẽ được cung cấp mảng dữ liệu sau Cập nhật tài nguyênKhi cập nhật tài nguyên, JSON. đặc tả API nói
Điều tương tự cũng áp dụng cho các mối quan hệ Vì Laravel cung cấp các quy tắc xác thực cho phép bạn so sánh các giá trị đang được xác thực (e. g. một ngày phải là Ví dụ: trong yêu cầu Để tuân thủ JSON. Đặc tả API, chúng tôi phải giả định rằng các trường bị thiếu là các giá trị hiện tại được lưu trữ trên tài nguyên. Do đó, chúng tôi lấy các giá trị tài nguyên hiện tại và sau đó hợp nhất các giá trị máy khách ở trên cùng. Trong ví dụ trên, điều này có nghĩa là trình xác thực nhận dữ liệu sau Khi tính giá trị hiện tại ta chỉ lấy giá trị của quan hệ Nếu bạn cần các giá trị của một mối quan hệ không được bao gồm theo mặc định, hãy sử dụng phương pháp Nếu bạn muốn loại trừ mối quan hệ Tùy chỉnh các giá trị hiện cóNếu bạn muốn điều chỉnh bất kỳ giá trị hiện tại nào trước khi hợp nhất các giá trị do máy khách cung cấp, hãy triển khai phương thức Bạn phải trả về mảng mà bạn muốn trình xác thực sử dụng. Nếu bạn trả về Sửa đổi mối quan hệJSON. Đặc tả API cung cấp các điểm cuối mối quan hệ để sửa đổi mối quan hệ tài nguyên. Các mối quan hệ với một và nhiều có thể được thay thế bằng yêu cầu Đưa ra yêu cầu này Trình xác thực của bạn sẽ được cung cấp mảng dữ liệu sau TIỀN BOA Trong trường hợp này, chúng tôi lọc các quy tắc tài nguyên được trả về từ phương thức Quy tắc xác thựcXác định quy tắc tài nguyênĐể xác thực dữ liệu này, bạn xác định các quy tắc xác thực trong phương thức Ví dụ: quy tắc TIỀN BOA Bạn có thể nhập gợi ý bất kỳ phụ thuộc nào bạn cần trong chữ ký của phương thức quy tắc. Chúng sẽ tự động được giải quyết thông qua Laravel service container Quy tắc quan hệTrong ví dụ trên, bạn sẽ nhận thấy rằng quy tắc Thay vào đó, đối với các mối quan hệ, tất cả những gì chúng ta cần làm là cung cấp các quy tắc Hãy nhớ rằng bạn phải xác thực mọi mối quan hệ mà bạn muốn điền vào mô hình của mình ID do khách hàng tạoVí dụ: nếu tài nguyên của bạn chấp nhận, bạn phải thêm các quy tắc xác thực cho trường Quy tắc ID ứng dụng khách đảm bảo rằng ID được cung cấp khớp với bộ trong giản đồ của bạn. Do đó, không cần sử dụng quy tắc xác thực Nếu bạn luôn mong đợi một khách hàng cung cấp một TIỀN BOA Như trong ví dụ, không cần sử dụng quy tắc Truy cập mô hìnhNếu bạn cần truy cập mô hình khi xác định các quy tắc xác thực của mình, hãy sử dụng phương pháp Ví dụ Truy cập dữ liệu xác thựcNếu bạn cần truy cập dữ liệu xác thực trong phương thức Thêm Sau MócNếu bạn muốn thêm hook "after" vào yêu cầu biểu mẫu, bạn có thể sử dụng phương thức CẢNH BÁO Khi thêm các hook sau, bạn sẽ cần sử dụng yêu cầu để xác định loại yêu cầu đó là gì. Ví dụ trên kiểm tra xem yêu cầu đang tạo hay cập nhật tài nguyên Bạn cần làm điều này vì phương thức Xác thực có điều kiện phức tạpPhương thức CẢNH BÁO Khi thêm xác thực có điều kiện, bạn sẽ cần sử dụng yêu cầu để xác định loại yêu cầu đó là gì. Ví dụ trên kiểm tra xem yêu cầu có đang tạo hoặc cập nhật tài nguyên hay không trước khi áp dụng các quy tắc xác thực có điều kiện Bạn cần làm điều này vì phương thức Xác thực BooleansTrong JSON, một boolean luôn là Đối với JSON, tốt hơn là nhập đúng các giá trị boolean. Sử dụng quy tắc JSON. API. Điều này không thể xác thực bằng cách sử dụng quy tắc xác thực
Để chấp nhận bất kỳ định dạng hợp lệ nào cho trường ngày tháng, gói này cung cấp một đối tượng quy tắc. Điều này có thể được sử dụng như sau Xác thực sốCác quy tắc Nếu bạn có một trường có thể chấp nhận số nguyên hoặc số float, hãy sử dụng quy tắc xác thực Để chỉ chấp nhận số nguyên, hãy sử dụng quy tắc Quy tắc bắt buộcSử dụng quy tắc Nếu bạn luôn muốn con trỏ liên quan đến trường thực, e. g. Để minh họa điều này, đây là hai yêu cầu không tuân theo quy tắc Trường bị bỏ quaTrong trường hợp này, không thể sử dụng một con trỏ JSON của Trường trốngTrong trường hợp này, con trỏ có thể là Quy tắc đã xác nhậnQuy tắc Nếu bạn không sử dụng dấu gạch dưới trong tên trường của mình, điều này có nghĩa là quy tắc Trong trường hợp này, bạn sẽ cần sử dụng các quy tắc sau để Hãy nhớ lưu ý, nơi máy chủ phải giả định rằng các giá trị bị thiếu có giá trị hiện tại. Đối với các trường hợp mật khẩu, trình xác thực của bạn sẽ không có quyền truy cập vào giá trị hiện tại Do đó, bạn sẽ cần điều chỉnh việc sử dụng quy tắc Tùy chỉnh thông báo lỗiBạn có thể tùy chỉnh các thông báo lỗi được sử dụng bởi yêu cầu biểu mẫu bằng cách ghi đè phương thức Tùy chỉnh các thuộc tính xác thựcNếu bạn muốn thay thế phần Các yêu cầu biểu mẫu của Laravel cho phép bạn truy xuất dữ liệu đã được xác thực bằng phương thức Đối với các yêu cầu về mối quan hệ, bạn nên sử dụng phương thức Xóa tài nguyênCó thể thêm quy tắc xác thực để xóa tài nguyên. Điều này hữu ích nếu bạn muốn ngăn việc xóa tài nguyên trong một số trường hợp nhất định. Xác nhận này là tùy chọn. Nếu lớp trình xác thực của bạn không xác định bất kỳ quy tắc xóa nào, yêu cầu xóa sẽ được cho phép Ví dụ: nếu bạn không muốn cho phép ứng dụng khách API xóa Xóa dữ liệu xác thựcTheo mặc định, chúng tôi chuyển các giá trị trường hiện tại của tài nguyên tới trình xác thực xóa. Đây là quy trình tương tự như , mặc dù chúng tôi cho phép bạn thêm dữ liệu cụ thể cho yêu cầu xóa Để thêm dữ liệu cho xác thực xóa, hãy sử dụng phương thức Trong ví dụ trên, phương thức Quy tắc xác thực xóaXác định quy tắc xác thực xóa trong phương thức Như với phương thức Bạn cũng có thể truy cập mô hình đang bị xóa thông qua phương pháp Xóa thông báo lỗiĐể thêm bất kỳ thông báo lỗi tùy chỉnh nào cho các quy tắc tài nguyên xóa của bạn, hãy triển khai phương thức Xóa tên thuộc tínhĐể thêm bất kỳ tên thuộc tính tùy chỉnh nào cho quy tắc tài nguyên xóa của bạn, hãy triển khai phương thức Phương pháp trợ giúpLớp yêu cầu tài nguyên của chúng tôi có một số phương thức trợ giúp, để cho phép bạn xác định loại yêu cầu mà lớp đang xử lý. Các phương pháp có sẵn là TIỀN BOA Chúng tôi khuyên bạn nên sử dụng các phương pháp này thay vì sử dụng phương pháp đang tạoTrả về |