답변:
$entity
배열 로 변환 할 필요가 없다고 생각합니다 . 이것은 간단하게 작동합니다.
$entity->get('field_name')->getValue();
참고 : 모듈 kint()
에서 devel_kint
사용하면 객체 요소에 액세스하는 데 사용할 수있는 모든 사용 가능한 방법을 알 수 있으므로 비교적 var_dump()
유용하지 않습니다.
->getValue()
일반적이며 필드 유형에 관계없이 작동합니다. 을 사용 ->value
하면 필드 값이 value
속성에 저장된 경우에만 작동합니다 . 더 복잡한 유형 (예 : 날짜 또는 엔터티 참조)에는 작동하지 않습니다.
drupal 8에서 $ node는 class node입니다.
$node->field_machine_name->getValue();
또는
$node->get('field_machine_name')->getValue();
값의 배열을 반환합니다.
하나만 기대하면 다음과 같이 배열을 문자열 화 할 수 있습니다.
$node->field_machine_name->getString();
또는
$node->get('field_machine_name')->getString();
필드의 $node->body->value
경우 예를 들어 사용할 수 있어야합니다 . 필드 이름을 모르는 경우 Drupal 8 용 Devel 모듈을 설치하고 like를 통해 노드를 검사하는 것이 좋습니다 dsm($node)
.
$entity->toArray()
엔터티에 무엇이 있는지 항상 확인할 수 있습니다 . xdebug (예 : phpstorm)를 사용하더라도 엔티티 객체 자체를 이해하는 것은 매우 어렵습니다. dsm($node)
Drupal 8에서 어떤 의미가 있는지 의심 합니다. 브라우저 내 디버깅을 고집한다면 (Dupal 8은 xdebug없이 디버깅하기에는 너무 복잡합니다) dsm($node->toArray())
원하는 것입니다.
다음 코드 스 니펫을 사용하여 노드 필드 값을 가져 오십시오.
이것은 URL에서 노드 ID를 얻는 데 사용됩니다
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
nid를 사용하여 노드 데이터를로드하려면
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
필드 값을 얻는 데 사용됩니다.
$terms = $node->get('field_Name')->getValue();
노드 제목을 얻는 데 사용됩니다.
$product_name = $node->getTitle();
use Drupal\node\Entity\Node
$node = Node::load($nid);
$title = $node->get('title')->value;
또는
use Drupal\node\Entity\Node
$title = Node::load($nid)->get('title')->value;
다음은 노드 객체의 값에 액세스하는 것에 대한 좋은 글입니다 https://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html
간단합니다 :
$node->get('field_name')->getValue()
필드가 엔티티 참조 필드 인 경우 참조 된 엔티티를 얻는 특별한 방법이 있습니다.
대상 ID를 가져 오려면 (첫 번째 요소) :
$entity->get('field_entity_reference')->target_id
로드 된 엔터티를 가져 오려면 (첫 번째 요소) :
$entity->get('field_entity_reference')->entity
->entity
필드에서 사용 하면 엔티티를 자동으로로드합니다.
필드에 여러 참조가 포함될 수 있으면 다음과 같이 모두 참조를 가져올 수 있습니다.
$entities = $entity->get('field_entity_reference')->referencedEntities();
그것은 당신에게 엔티티의 배열을 줄 것입니다.