Bộ sưu tập tài nguyên Laravel với mối quan hệ
Khi xây dựng API, bạn có thể cần một lớp chuyển đổi nằm giữa các mô hình Eloquent của bạn và các phản hồi JSON thực sự được trả về cho người dùng ứng dụng của bạn. Các lớp tài nguyên của Laravel cho phép bạn chuyển đổi các mô hình và bộ sưu tập mô hình của bạn thành JSON một cách rõ ràng và dễ dàng Show Tạo tài nguyênĐể tạo một lớp tài nguyên, bạn có thể sử dụng lệnh Artisan 5. Theo mặc định, tài nguyên sẽ được đặt trong thư mục 6 của ứng dụng của bạn. Tài nguyên mở rộng lớp 7
Bộ sưu tập tài nguyênNgoài việc tạo các tài nguyên chuyển đổi các mô hình riêng lẻ, bạn có thể tạo các tài nguyên chịu trách nhiệm chuyển đổi các bộ sưu tập mô hình. Điều này cho phép phản hồi của bạn bao gồm các liên kết và thông tin meta khác có liên quan đến toàn bộ bộ sưu tập của một tài nguyên nhất định Để tạo một bộ sưu tập tài nguyên, bạn nên sử dụng cờ 8 khi tạo tài nguyên. Hoặc, bao gồm từ 9 trong tên tài nguyên sẽ cho Laravel biết rằng nó sẽ tạo một tài nguyên bộ sưu tập. Tài nguyên bộ sưu tập mở rộng lớp 0
Khái niệm tổng quan
Trước khi đi sâu vào tất cả các tùy chọn có sẵn cho bạn khi viết tài nguyên, trước tiên chúng ta hãy xem xét kỹ cách sử dụng tài nguyên trong Laravel. Một lớp tài nguyên đại diện cho một mô hình duy nhất cần được chuyển đổi thành cấu trúc JSON. Ví dụ, đây là một lớp tài nguyên 1 đơn giản
Mỗi lớp tài nguyên định nghĩa một phương thức 2 trả về mảng các thuộc tính sẽ được chuyển đổi thành JSON khi gửi phản hồi. Lưu ý rằng chúng ta có thể truy cập các thuộc tính mô hình trực tiếp từ biến 3. Điều này là do một lớp tài nguyên sẽ tự động ủy quyền quyền truy cập thuộc tính và phương thức xuống mô hình bên dưới để truy cập thuận tiện. Khi tài nguyên được xác định, nó có thể được trả về từ một tuyến đường hoặc bộ điều khiển
Bộ sưu tập tài nguyênNếu bạn đang trả về một tập hợp tài nguyên hoặc phản hồi được phân trang, bạn có thể sử dụng phương thức 4 khi tạo phiên bản tài nguyên trong tuyến hoặc bộ điều khiển của mình
Lưu ý rằng điều này không cho phép bổ sung bất kỳ dữ liệu meta nào có thể cần được trả lại cùng với bộ sưu tập. Nếu bạn muốn tùy chỉnh phản hồi của bộ sưu tập tài nguyên, bạn có thể tạo một tài nguyên chuyên dụng để đại diện cho bộ sưu tập 5Khi lớp tập hợp tài nguyên đã được tạo, bạn có thể dễ dàng xác định bất kỳ dữ liệu meta nào sẽ được đưa vào phản hồi 6Sau khi xác định bộ sưu tập tài nguyên của bạn, nó có thể được trả về từ một tuyến đường hoặc bộ điều khiển 7Bảo quản khóa bộ sưu tậpKhi trả về một bộ sưu tập tài nguyên từ một tuyến đường, Laravel đặt lại các khóa của bộ sưu tập để chúng theo thứ tự số đơn giản. Tuy nhiên, bạn có thể thêm thuộc tính 5 vào lớp tài nguyên của mình để cho biết liệu có nên giữ lại khóa bộ sưu tập hay không 9Khi thuộc tính 5 được đặt thành 7, khóa bộ sưu tập sẽ được giữ nguyên 2Tùy chỉnh lớp tài nguyên cơ bảnThông thường, thuộc tính 8 của bộ sưu tập tài nguyên được điền tự động với kết quả của việc ánh xạ từng mục của bộ sưu tập tới lớp tài nguyên duy nhất của nó. Lớp tài nguyên số ít được coi là tên lớp của bộ sưu tập không có chuỗi 9 ở cuốiVí dụ: 50 sẽ cố gắng ánh xạ các phiên bản người dùng đã cho vào tài nguyên 1. Để tùy chỉnh hành vi này, bạn có thể ghi đè lên thuộc tính 52 của bộ sưu tập tài nguyên của mình 0Tài nguyên viết
Về bản chất, tài nguyên rất đơn giản. Họ chỉ cần chuyển đổi một mô hình nhất định thành một mảng. Vì vậy, mỗi tài nguyên chứa một phương thức 2 dịch các thuộc tính của mô hình của bạn thành một mảng thân thiện với API có thể được trả lại cho người dùng của bạn
Khi một tài nguyên đã được xác định, nó có thể được trả về trực tiếp từ một tuyến đường hoặc bộ điều khiển
Các mối quan hệNếu bạn muốn bao gồm các tài nguyên liên quan trong phản hồi của mình, bạn có thể thêm chúng vào mảng được trả về bởi phương thức 2 của bạn. Trong ví dụ này, chúng tôi sẽ sử dụng phương pháp 4 của tài nguyên 55 để thêm các bài đăng trên blog của người dùng vào phản hồi của tài nguyên 3
Bộ sưu tập tài nguyênTrong khi các tài nguyên dịch một mô hình đơn lẻ thành một mảng, thì các bộ sưu tập tài nguyên dịch một tập hợp các mô hình thành một mảng. Không nhất thiết phải xác định lớp bộ sưu tập tài nguyên cho từng loại mô hình của bạn vì tất cả các tài nguyên đều cung cấp phương thức 4 để tạo bộ sưu tập tài nguyên "đặc biệt" một cách nhanh chóng
Tuy nhiên, nếu bạn cần tùy chỉnh siêu dữ liệu được trả về cùng với bộ sưu tập, thì cần phải xác định một bộ sưu tập tài nguyên 6Giống như các tài nguyên đơn lẻ, các bộ sưu tập tài nguyên có thể được trả về trực tiếp từ các tuyến hoặc bộ điều khiển 7gói dữ liệuTheo mặc định, tài nguyên ngoài cùng của bạn được bọc trong khóa 58 khi phản hồi tài nguyên được chuyển thành JSON. Vì vậy, ví dụ, một phản hồi thu thập tài nguyên điển hình trông giống như sau 7Nếu bạn muốn tắt tính năng bao bọc của tài nguyên ngoài cùng, bạn có thể sử dụng phương thức 59 trên lớp tài nguyên cơ sở. Thông thường, bạn nên gọi phương thức này từ 60 hoặc nhà cung cấp dịch vụ khác được tải theo mọi yêu cầu đối với ứng dụng của bạn 8
Gói tài nguyên lồng nhauBạn có toàn quyền quyết định cách các mối quan hệ của tài nguyên được bao bọc. Nếu bạn muốn tất cả các bộ sưu tập tài nguyên được bao bọc trong một khóa 58, bất kể chúng được lồng vào nhau như thế nào, bạn nên xác định một lớp bộ sưu tập tài nguyên cho mỗi tài nguyên và trả về bộ sưu tập trong một khóa 58Bạn có thể tự hỏi liệu điều này có khiến tài nguyên ngoài cùng của bạn bị gói trong hai khóa 58 không. Đừng lo lắng, Laravel sẽ không bao giờ để tài nguyên của bạn vô tình bị double-wrapped, vì vậy bạn không cần phải lo lắng về mức độ lồng nhau của bộ sưu tập tài nguyên mà bạn đang chuyển đổi 9Gói dữ liệu và phân trangKhi trả về các bộ sưu tập được đánh số trang trong một phản hồi tài nguyên, Laravel sẽ bọc dữ liệu tài nguyên của bạn trong khóa 58 ngay cả khi phương thức 59 đã được gọi. Điều này là do các phản hồi được phân trang luôn chứa các khóa 68 và 69 với thông tin về trạng thái của trình phân trang 0phân trangBạn luôn có thể chuyển một thể hiện của trình phân trang tới phương thức 4 của tài nguyên hoặc tới một bộ sưu tập tài nguyên tùy chỉnh 1Phản hồi được phân trang luôn chứa các khóa 68 và 69 với thông tin về trạng thái của người phân trang 0Thuộc tính có điều kiệnĐôi khi, bạn có thể chỉ muốn đưa một thuộc tính vào phản hồi tài nguyên nếu một điều kiện nhất định được đáp ứng. Ví dụ: bạn có thể chỉ muốn bao gồm một giá trị nếu người dùng hiện tại là "quản trị viên". Laravel cung cấp nhiều phương thức trợ giúp để hỗ trợ bạn trong tình huống này. Phương thức 73 có thể được sử dụng để thêm một thuộc tính vào phản hồi tài nguyên một cách có điều kiện 3Trong ví dụ này, khóa 74 sẽ chỉ được trả về trong phản hồi tài nguyên cuối cùng nếu phương thức 75 của người dùng được xác thực trả về 7. Nếu phương thức trả về 77, khóa 74 sẽ bị xóa hoàn toàn khỏi phản hồi tài nguyên trước khi được gửi lại cho máy khách. Phương thức 73 cho phép bạn xác định rõ ràng các tài nguyên của mình mà không cần dùng đến các câu điều kiện khi xây dựng mảngPhương thức 73 cũng chấp nhận Đóng làm đối số thứ hai, cho phép bạn tính giá trị kết quả chỉ khi điều kiện đã cho là 7 4Hợp nhất các thuộc tính có điều kiệnĐôi khi, bạn có thể có một số thuộc tính chỉ nên được đưa vào phản hồi tài nguyên dựa trên cùng một điều kiện. Trong trường hợp này, bạn có thể sử dụng phương pháp 92 để chỉ bao gồm các thuộc tính trong phản hồi khi điều kiện đã cho là 7 5Một lần nữa, nếu điều kiện đã cho là 77, các thuộc tính này sẽ bị xóa hoàn toàn khỏi phản hồi của tài nguyên trước khi nó được gửi tới máy khách
Mối quan hệ có điều kiệnNgoài các thuộc tính tải có điều kiện, bạn có thể đưa các mối quan hệ vào các phản hồi tài nguyên của mình một cách có điều kiện dựa trên việc liệu mối quan hệ đã được tải trên mô hình hay chưa. Điều này cho phép bộ điều khiển của bạn quyết định mối quan hệ nào sẽ được tải trên mô hình và tài nguyên của bạn chỉ có thể dễ dàng bao gồm chúng khi chúng thực sự đã được tải Cuối cùng, điều này giúp tránh các sự cố truy vấn "N+1" trong tài nguyên của bạn dễ dàng hơn. Phương pháp 96 có thể được sử dụng để tải một mối quan hệ có điều kiện. Để tránh tải các mối quan hệ không cần thiết, phương pháp này chấp nhận tên của mối quan hệ thay vì chính mối quan hệ đó 6Trong ví dụ này, nếu mối quan hệ chưa được tải, khóa 97 sẽ bị xóa hoàn toàn khỏi phản hồi tài nguyên trước khi nó được gửi tới máy kháchThông tin xoay vòng có điều kiệnNgoài việc đưa thông tin về mối quan hệ vào phản hồi tài nguyên của bạn một cách có điều kiện, bạn có thể đưa vào một cách có điều kiện dữ liệu từ các bảng trung gian của mối quan hệ nhiều-nhiều bằng cách sử dụng phương pháp 98. Phương thức 98 chấp nhận tên của bảng tổng hợp làm đối số đầu tiên của nó. Đối số thứ hai phải là một Đóng xác định giá trị được trả về nếu thông tin trục có sẵn trên mô hình 7Nếu bảng trung gian của bạn đang sử dụng một bộ truy cập không phải là 20, bạn có thể sử dụng phương pháp 21 8Thêm siêu dữ liệuMột số tiêu chuẩn API JSON yêu cầu bổ sung dữ liệu meta vào các phản hồi về bộ sưu tập tài nguyên và tài nguyên của bạn. Điều này thường bao gồm những thứ như 69 đối với tài nguyên hoặc các tài nguyên liên quan hoặc siêu dữ liệu về chính tài nguyên đó. Nếu bạn cần trả về dữ liệu meta bổ sung về một tài nguyên, hãy đưa nó vào phương thức 2 của bạn. Ví dụ: bạn có thể bao gồm thông tin 24 khi chuyển đổi một bộ sưu tập tài nguyên 9Khi trả về dữ liệu meta bổ sung từ tài nguyên của bạn, bạn không bao giờ phải lo lắng về việc vô tình ghi đè các khóa 69 hoặc 68 được Laravel tự động thêm vào khi trả về các phản hồi được phân trang. Bất kỳ 69 bổ sung nào bạn xác định sẽ được hợp nhất với các liên kết do trình phân trang cung cấpSiêu dữ liệu cấp cao nhấtĐôi khi, bạn có thể chỉ muốn bao gồm một số dữ liệu meta nhất định với phản hồi tài nguyên nếu tài nguyên là tài nguyên ngoài cùng được trả về. Thông thường, điều này bao gồm thông tin meta về toàn bộ phản hồi. Để xác định siêu dữ liệu này, hãy thêm phương thức 28 vào lớp tài nguyên của bạn. Phương thức này sẽ trả về một mảng dữ liệu meta được bao gồm trong phản hồi tài nguyên chỉ khi tài nguyên là tài nguyên ngoài cùng được hiển thị 0Thêm siêu dữ liệu khi xây dựng tài nguyênBạn cũng có thể thêm dữ liệu cấp cao nhất khi xây dựng các phiên bản tài nguyên trong tuyến đường hoặc bộ điều khiển của mình. Phương thức 29, có sẵn trên tất cả các tài nguyên, chấp nhận một mảng dữ liệu sẽ được thêm vào phản hồi của tài nguyên 1Phản hồi tài nguyênNhư bạn đã đọc, tài nguyên có thể được trả về trực tiếp từ các tuyến và bộ điều khiển
Tuy nhiên, đôi khi bạn có thể cần tùy chỉnh phản hồi HTTP gửi đi trước khi nó được gửi tới máy khách. Có hai cách để thực hiện điều này. Trước tiên, bạn có thể xâu chuỗi phương thức 00 vào tài nguyên. Phương thức này sẽ trả về một phiên bản 01, cho phép bạn kiểm soát hoàn toàn các tiêu đề của phản hồi 3Ngoài ra, bạn có thể định nghĩa một phương thức 02 trong chính tài nguyên đó. Phương thức này sẽ được gọi khi tài nguyên được trả về dưới dạng tài nguyên ngoài cùng trong phản hồi |