it-swarm-vi.com

Làm cách nào để tôi truy cập giá trị trường cho một đối tượng (ví dụ: nút)?

node_load((int) $nid) tải một thực thể nút được điền đầy đủ. $node->title->value có được tiêu đề, nhưng làm cách nào để truy cập các giá trị trường trong Drupal 8?

62
dbj44

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 sẽ đơn giản hoạt động.

$entity->get('field_name')->getValue();

FYI: Sử dụng kint() từ mô đun devel_kint 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 đó, so sánh var_dump() sẽ ít hữu ích hơn.

95
Ashkar A.Rahman

in 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();
58
Matoeil

Đối với các trường, bạn sẽ có thể sử dụng $node->body->value Chẳng hạn. 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 like dsm($node).

35
tenken

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) in 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à những gì bạn muốn.

17
user49

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();
14
Swapnil Bijwe

Đối với tôi, việc có $entity (Một nút) thì điều này có hiệu quả:

$entity->field_name->getValue();

sử dụng 8.1.

7
Alex

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();
6
Francis

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 đang sử dụng ->entity trên trường nó tự động trả về thực thể được tải.

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ẽ trả về một mảng các thực thể.

6
user72672
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à Nice viết về việc truy cập các giá trị từ đối tượng nút https://www.frobaguox.com/posts/2016/03/11/simplify-drupal-8-field-value-calls.html

5
pwaterz