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. Ví dụ: bạn có thể muốn hiển thị các thuộc tính nhất định cho một nhóm người dùng chứ không phải những người khác hoặc bạn có thể muốn luôn bao gồm các mối quan hệ nhất định trong biểu diễn JSON của các mô hình của mình. Các lớp tài nguyên của Eloquent cho phép bạn chuyển đổi các mô hình và bộ sưu tập mô hình của mình thành JSON một cách rõ ràng và dễ dàng
Tất nhiên, bạn luôn có thể chuyển đổi các mô hình hoặc bộ sưu tập Eloquent thành JSON bằng các phương thức
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
0 của chúng; 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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
1. Theo mặc định, tài nguyên sẽ được đặt trong thư mục use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
2 của ứng dụng của bạn. Tài nguyên mở rộng lớp use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
3php artisan make:resource UserResource
Bộ sưu tập tài nguyên
Ngoà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 các phản hồi JSON 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ờ
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
4 khi tạo tài nguyên. Hoặc, bao gồm từ use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
5 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 use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
6________số 8Khái niệm tổng quan
Lưu ý
Đây là tổng quan cấp cao về tài nguyên và bộ sưu tập tài nguyên. Bạn nên đọc các phần khác của tài liệu này để hiểu sâu hơn về tùy chỉnh và sức mạnh mà tài nguyên cung cấp cho bạn.
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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
7 đơn giảnuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
0Mỗi lớp tài nguyên định nghĩa một phương thức
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
8 trả về mảng các thuộc tính sẽ được chuyển đổi thành JSON khi tài nguyên được trả về dưới dạng phản hồi từ một tuyến hoặc phương thức điều khiểnLư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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
9. Đ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. Tài nguyên chấp nhận thể hiện mô hình cơ bản thông qua hàm tạo của nóuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
3Bộ sưu tập tài nguyên
Nếu bạn đang trả về một bộ sưu tập tài nguyên hoặc phản hồi được phân trang, bạn nên sử dụng phương thức
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
40 do lớp tài nguyên của bạn cung cấp khi tạo phiên bản tài nguyên trong tuyến hoặc bộ điều khiển của bạnuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
Lưu ý rằng điều này không cho phép bổ sung bất kỳ dữ liệu meta tùy chỉnh nào có thể cần được trả lại cùng với bộ sưu tập của bạn. 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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
4Khi 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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
7Sau 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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
8Bảo quản khóa bộ sưu tập
Khi 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ố. Tuy nhiên, bạn có thể thêm một thuộc tính
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
41 vào lớp tài nguyên của mình để cho biết liệu các khóa gốc của bộ sưu tập có nên được giữ nguyên hay khônguse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
0Khi thuộc tính
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
41 được đặt thành use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
43, khóa bộ sưu tập sẽ được giữ nguyên khi bộ sưu tập được trả về từ một tuyến đường hoặc bộ điều khiểnuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
3Tùy chỉnh lớp tài nguyên cơ bản
Thông thường, thuộc tính
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
44 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 mà không có phần use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
5 ở cuối tên lớp. Ngoài ra, tùy thuộc vào sở thích cá nhân của bạn, lớp tài nguyên số ít có thể có hoặc không có hậu tố use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
46Ví dụ:
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
47 sẽ cố gắng ánh xạ các phiên bản người dùng đã cho vào tài nguyên use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
7. Để tùy chỉnh hành vi này, bạn có thể ghi đè lên thuộc tính use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
49 của bộ sưu tập tài nguyên của mìnhphp artisan make:resource User --collection
php artisan make:resource UserCollection
0Tài nguyên viết
Lưu ý
Nếu bạn chưa đọc , bạn nên đọc trước khi tiếp tục với tài liệu này.
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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
8 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ả về từ các tuyến hoặc bộ điều khiển của ứng dụng của bạnuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
0Khi 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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
3Cá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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
8 của tài nguyên của bạn. Trong ví dụ này, chúng tôi sẽ sử dụng phương pháp use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
40 của tài nguyên use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
72 để 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ênphp artisan make:resource User --collection
php artisan make:resource UserCollection
3Lưu ý
Nếu bạn chỉ muốn bao gồm các mối quan hệ khi chúng đã được tải, hãy xem tài liệu trên.
Bộ sưu tập tài nguyên
Trong khi các tài nguyên chuyển đổi 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 chuyển đổi một tập hợp các mô hình thành một mảng. Tuy nhiên, không nhất thiết phải xác định lớp tập hợp tài nguyên cho từng 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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
40 để tạo tập hợp tài nguyên "đặc biệt" một cách nhanh chónguse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
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, bạn cần xác định bộ sưu tập tài nguyên của riêng mình
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
7Giố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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
8gói dữ liệu
Theo mặc định, tài nguyên ngoài cùng của bạn được bọc trong khóa
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
75 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ư sauphp artisan make:resource User --collection
php artisan make:resource UserCollection
7Nếu bạn muốn sử dụng khóa tùy chỉnh thay vì
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
75, bạn có thể xác định thuộc tính use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
77 trên lớp tài nguyênphp artisan make:resource User --collection
php artisan make:resource UserCollection
8Nếu bạn muốn vô hiệu hóa tính năng bao bọc của tài nguyên ngoài cùng, bạn nên gọi phương thức
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
78 trên lớp cơ sở use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
3. Thông thường, bạn nên gọi phương thức này từ use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
80 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ạnphp artisan make:resource User --collection
php artisan make:resource UserCollection
9Cảnh báo
Phương pháp78 chỉ ảnh hưởng đến phản hồi ngoài cùng và sẽ không xóa các khóa
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
75 mà bạn thêm vào bộ sưu tập tài nguyên của mình theo cách thủ công.
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
Gói tài nguyên lồng nhau
Bạ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 bọc trong một khóa
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
75, bất kể chúng được lồng vào nhau như thế nào, thì bạn nên xác định một lớp bộ sưu tập tài nguyên cho từng tài nguyên và trả về bộ sưu tập trong một khóa use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
75Bạ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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
75 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 đổiuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
00Gói dữ liệu và phân trang
Khi trả về các bộ sưu tập được đánh số trang thông qua 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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
75 ngay cả khi phương thức use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
78 đã được gọi. Điều này là do các câu trả lời được phân trang luôn chứa các khóa use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
88 và use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
89 với thông tin về trạng thái của người phân tranguse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
01phân trang
Bạn có thể chuyển một thể hiện của trình phân trang Laravel sang phương thức
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
40 của một tài nguyên hoặc một bộ sưu tập tài nguyên tùy chỉnhuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
02Phản hồi được phân trang luôn chứa các khóa
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
88 và use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
89 với thông tin về trạng thái của người phân tranguse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
01Thuộ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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
03 có thể được sử dụng để thêm thuộc tính vào phản hồi tài nguyên một cách có điều kiệnuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
04Trong ví dụ này, khóa
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
04 sẽ chỉ được trả về trong phản hồi tài nguyên cuối cùng nếu phương thức use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
05 của người dùng được xác thực trả về use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
43. Nếu phương thức trả về use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
07, khóa use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
04 sẽ bị xóa khỏi phản hồi tài nguyên trước khi nó được gửi tới máy khách. Phương thức use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
03 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 lệnh điều kiện khi xây dựng mảngPhương thức
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
03 cũng chấp nhận một bao đóng làm đối số thứ hai, cho phép bạn tính toán giá trị kết quả chỉ khi điều kiện đã cho là use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
43use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
05Ngoài ra, phương pháp
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
32 có thể được sử dụng để bao gồm một thuộc tính trong phản hồi tài nguyên nếu thuộc tính không phải là nulluse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
06Hợ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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
33 để chỉ bao gồm các thuộc tính trong phản hồi khi điều kiện đã cho là use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
43use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
07Một lần nữa, nếu điều kiện đã cho là
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
07, các thuộc tính này sẽ bị xóa khỏi phản hồi của tài nguyên trước khi nó được gửi tới máy kháchCảnh báo
Không nên sử dụng phương thức33 trong các mảng kết hợp chuỗi và phím số. Hơn nữa, nó không nên được sử dụng trong các mảng có các phím số không được sắp xếp theo thứ tự.
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
Mối quan hệ có điều kiện
Ngoà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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
37 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ệ đóuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
08Trong ví dụ này, nếu mối quan hệ chưa được tải, khóa
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
38 sẽ bị xóa khỏi phản hồi tài nguyên trước khi nó được gửi tới máy kháchSố lượng mối quan hệ có điều kiện
Ngoài việc bao gồm các mối quan hệ một cách có điều kiện, bạn có thể bao gồm "số lượng" mối quan hệ một cách có điều kiện vào các phản hồi tài nguyên của mình dựa trên việc số lượng của mối quan hệ đã được tải trên mô hình hay chưa
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
09Phương pháp
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
39 có thể được sử dụng để bao gồm một cách có điều kiện số lượng mối quan hệ trong phản hồi tài nguyên của bạn. Phương pháp này tránh việc bao gồm thuộc tính một cách không cần thiết nếu không có số đếm của các mối quan hệuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
30Trong ví dụ này, nếu số đếm của mối quan hệ
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
38 chưa được tải, khóa php artisan make:resource User --collection
php artisan make:resource UserCollection
01 sẽ bị xóa khỏi phản hồi của 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ện
Ngoà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
php artisan make:resource User --collection
php artisan make:resource UserCollection
02. Phương thức php artisan make:resource User --collection
php artisan make:resource UserCollection
02 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 bao đóng trả về giá trị sẽ được trả về nếu thông tin trục có sẵn trên mô hìnhuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
31Nếu mối quan hệ của bạn đang sử dụng a , bạn có thể chuyển một phiên bản của mô hình bảng trung gian làm đối số đầu tiên cho phương thức
php artisan make:resource User --collection
php artisan make:resource UserCollection
02use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
32Nếu bảng trung gian của bạn đang sử dụng một bộ truy cập không phải là
php artisan make:resource User --collection
php artisan make:resource UserCollection
05, bạn có thể sử dụng phương pháp php artisan make:resource User --collection
php artisan make:resource UserCollection
06use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
33Thêm siêu dữ liệu
Mộ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ư
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
89 đố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 use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
8 của bạn. Ví dụ: bạn có thể bao gồm thông tin php artisan make:resource User --collection
php artisan make:resource UserCollection
09 khi chuyển đổi một bộ sưu tập tài nguyênuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
34Khi 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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
89 hoặc use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
88 được Laravel tự động thêm vào khi trả về các phản hồi được phân trang. Bất kỳ use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
89 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
php artisan make:resource User --collection
php artisan make:resource UserCollection
13 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 chỉ được đưa vào phản hồi tài nguyên khi tài nguyên là tài nguyên ngoài cùng được chuyển đổiuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
35Thêm siêu dữ liệu khi xây dựng tài nguyên
Bạ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
php artisan make:resource User --collection
php artisan make:resource UserCollection
14, 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ênuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
36Phản hồi tài nguyên
Như 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
use App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
3Tuy 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
php artisan make:resource User --collection
php artisan make:resource UserCollection
15 vào tài nguyên. Phương thức này sẽ trả về một phiên bản php artisan make:resource User --collection
php artisan make:resource UserCollection
16, cho bạn toàn quyền kiểm soát các tiêu đề của phản hồiuse App\Http\Resources\UserResource;
Route::get['/users', function [] {
return UserResource::collection[User::all[]];
38Ngoài ra, bạn có thể định nghĩa một phương thức
php artisan make:resource User --collection
php artisan make:resource UserCollection
17 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