Có thể dễ dàng nhất để bắt đầu với một ví dụ.
Hàm entity_metadata_wrapper() dường như thực hiện rất nhiều phép thuật phức tạp đằng sau hậu trường để trả về một đối tượng có tất cả dữ liệu liên quan đến thực thể được đề cập. Nhưng làm cách nào để biết những thuộc tính và phương thức nào có sẵn cho tôi sau khi đối tượng được trả về?
Giả sử tôi có Lệnh thương mại. (Đây không nhất thiết là một câu hỏi Thương mại, nó chỉ là một ví dụ tốt). Khi thanh toán, tôi muốn kiểm tra xem đơn đặt hàng có chứa mục hàng của một loại sản phẩm nhất định hay không và thông báo cho người dùng.Có lẽ tôi cũng muốn so sánh giá mặt hàng lót được tính toán với giá gốc trong loại sản phẩm.
Ok, vậy đó là Trật tự, Mục hàng), Loại sản phẩm, và Người dùng đó là tất cả các thực thể được tham chiếu. Loại Sản phẩm có nhiều trường tùy chỉnh, có thể đó là các tham chiếu đến một thực thể khác như thông tin thanh toán.
$order_wrapper = entity_metadata_wrapper('commerce_order', $order);
Theo tài liệu API thực thể, tất cả các thực thể được tham chiếu đó hiện được bao gồm trong đối tượng sẵn sàng để tôi sử dụng nhờ trình bao bọc.
Nhưng làm cách nào để tôi biết cách truy cập một giá trị mà tôi đang tìm kiếm hoặc vị trí của nó trong cấu trúc đối tượng? Tất cả các trường drupal được tham chiếu có phải tên máy của chúng theo thiết kế không? Tôi biết chuỗi phải đóng một vai trò, vậy yếu tố đó ảnh hưởng như thế nào? Và cấu trúc này có thay đổi mỗi khi entity_metadata_wrapper được gọi với điều kiện là thực thể được đề cập có thể tùy ý tham chiếu các thực thể khác (tham chiếu các thực thể khác, v.v.) không? Và nếu cấu trúc là tùy ý, bất kỳ mã nào dựa trên cấu trúc đó tại một thời điểm nhất định, nếu nó thay đổi, điều đó có phá vỡ mã không?
Cuối cùng, tôi thấy tài liệu tham khảo cho những thứ như -> lưu()
và ->giá trị()
trong tài liệu API Thực thể, nhưng tôi không thể tìm thấy tài liệu tham khảo về bộ phương pháp đầy đủ có sẵn cho tôi. Có bất kỳ cấu trúc logic nào để tìm ra điều này hay tôi cần sử dụng thứ gì đó như xdebug mỗi lần (và nếu tôi làm vậy, điều đó vẫn không cho tôi biết phương pháp nào có sẵn để tôi hành động trên dữ liệu). Đây là câu trả lời dành cho D7, nhưng nếu câu trả lời D8+ có thể làm rõ hơn, vui lòng cung cấp.