Câu trả lời:
Tôi đoán bạn không cần phải chuyển đổi $entity
thành một mảng, điều này chỉ đơn giản là hoạt động.
$entity->get('field_name')->getValue();
FYI: Sử dụng kint()
từ devel_kint
mô-đun sẽ cho bạn biết tất cả các phương thức có sẵn có thể được sử dụng để truy cập các phần tử đối tượng, do đó, tương đối var_dump()
ít hữu ích hơn.
getValue()
hoạt động với tôi (cả trên 8.1.x và 8.2.x) xem tài liệu tham khảo api
->getValue()
là chung chung và sẽ hoạt động bất kể loại trường. Nếu bạn sử dụng ->value
, nó chỉ hoạt động nếu giá trị trường được lưu trữ trong một thuộc value
tính. Nó sẽ không hoạt động đối với các loại phức tạp hơn (ví dụ: ngày hoặc tham chiếu thực thể).
trong drupal 8, nút $ là nút của lớp
$node->field_machine_name->getValue();
hoặc là
$node->get('field_machine_name')->getValue();
sẽ trả về một mảng các giá trị.
Nếu bạn chỉ mong đợi một, bạn cũng có thể xâu chuỗi mảng với
$node->field_machine_name->getString();
hoặc là
$node->get('field_machine_name')->getString();
Đối với các lĩnh vực bạn sẽ có thể sử dụng $node->body->value
ví dụ. Nếu bạn không biết tên trường là gì, tôi khuyên bạn nên cài đặt mô-đun Devel cho Drupal 8 và kiểm tra nút thông qua như thế nào dsm($node)
.
Bạn luôn có thể làm $entity->toArray()
để xem những gì trong một thực thể. Ngay cả khi sử dụng xdebug (ví dụ với phpstorm), việc tự mình hiểu một đối tượng thực thể là rất khó. Tôi nghi ngờ dsm($node)
trong Drupal 8 có ý nghĩa gì. Nếu bạn khăng khăng gỡ lỗi trong trình duyệt (nhưng bạn không nên, Drupal 8 quá phức tạp để gỡ lỗi mà không có xdebug) dsm($node->toArray())
là điều bạn muốn.
Sử dụng đoạn mã sau để nhận giá trị trường nút
Điều này được sử dụng để có được id nút từ url
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
Để tải dữ liệu nút bằng nid
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
Điều này được sử dụng để có được giá trị trường.
$terms = $node->get('field_Name')->getValue();
Điều này được sử dụng để có được tiêu đề nút.
$product_name = $node->getTitle();
Đối với tôi, có một $entity
(một nút) điều này hoạt động:
$entity->field_name->getValue();
sử dụng 8.1.
Trong khi sử dụng (cách chính xác thực tế):
$node = \Drupal\node\Entity\Node::load($nid);
$node->get('nid')->value; // returns a raw value - Node ID
// Following both returns array structure containing value/target id nested value.
$node->get('nid')->value();
$node->nid->getValue();
use Drupal\node\Entity\Node
$node = Node::load($nid);
$title = $node->get('title')->value;
Hoặc là
use Drupal\node\Entity\Node
$title = Node::load($nid)->get('title')->value;
Dưới đây là một bài viết hay về cách truy cập các giá trị từ đối tượng nút https: //www.frob visualox.com/posts/2016/03/11/simplify-drupal-8-field-value-calls.html
Nó đơn giản:
$node->get('field_name')->getValue()
Nếu trường là một trường tham chiếu thực thể, có một số cách đặc biệt để có được các thực thể được tham chiếu.
Để lấy id đích (phần tử đầu tiên):
$entity->get('field_entity_reference')->target_id
Để có được thực thể được tải (phần tử đầu tiên):
$entity->get('field_entity_reference')->entity
Khi sử dụng ->entity
trên trường, nó sẽ tự động tải thực thể.
Nếu trường có thể chứa nhiều tài liệu tham khảo, bạn có thể tìm nạp tất cả chúng như thế này:
$entities = $entity->get('field_entity_reference')->referencedEntities();
Điều đó sẽ cung cấp cho bạn một loạt các thực thể.