Respostas:
Eu acho que você não precisa converter $entity
em uma matriz, isso simplesmente funcionaria.
$entity->get('field_name')->getValue();
FYI: O uso kint()
do devel_kint
módulo permitirá que você saiba todos os métodos disponíveis que podem ser usados para acessar os elementos do objeto; portanto, comparativamente, var_dump()
é menos útil.
getValue()
funciona para mim (tanto em 8.1.xe 8.2.x) consulte a referência da API
->getValue()
é genérico e funcionará independentemente do tipo de campo. Se você usar ->value
, ele funcionará apenas se o valor do campo estiver armazenado em uma value
propriedade. Não funcionará para tipos mais complexos (por exemplo, referência de data ou entidade).
no drupal 8, sendo $ node do nó da classe
$node->field_machine_name->getValue();
ou
$node->get('field_machine_name')->getValue();
retornará uma matriz de valores.
Se você espera apenas um, também pode restringir a matriz com
$node->field_machine_name->getString();
ou
$node->get('field_machine_name')->getString();
Para campos você deve poder usar, $node->body->value
por exemplo. Se você não souber quais são os nomes dos campos, recomendo instalar o módulo Devel para Drupal 8 e inspecionar o nó por meio de um exemplo dsm($node)
.
Você sempre pode fazer $entity->toArray()
para ver o que há em uma entidade. Mesmo ao usar o xdebug (por exemplo, com o phpstorm), é muito difícil entender um objeto de entidade por si próprio. Duvido que dsm($node)
no Drupal 8 faça algum sentido. Se você insiste na depuração no navegador (mas não deve, o Drupal 8 é muito complexo para depurar sem o xdebug) dsm($node->toArray())
é o que você deseja.
Use o seguinte snippet de código para obter valores de campo do nó
Isso é usado para obter o ID do nó da URL
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
Para carregar dados do nó usando nid
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
Isso é usado para obter o valor do campo.
$terms = $node->get('field_Name')->getValue();
Isso é usado para obter o título do nó.
$product_name = $node->getTitle();
Para mim, ter um $entity
(um nó) funcionou:
$entity->field_name->getValue();
usando 8.1.
Enquanto estiver usando (da maneira correta):
$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;
Ou
use Drupal\node\Entity\Node
$title = Node::load($nid)->get('title')->value;
Aqui está uma boa descrição sobre como acessar valores do objeto de nó https://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html
É simplesmente:
$node->get('field_name')->getValue()
Se o campo for um campo de referência de entidade, existem algumas maneiras especiais de obter as entidades referenciadas.
Para obter o ID de destino (primeiro elemento):
$entity->get('field_entity_reference')->target_id
Para obter a entidade carregada (primeiro elemento):
$entity->get('field_entity_reference')->entity
Ao usar ->entity
no campo, ele carrega automaticamente a entidade.
Se o campo puder conter várias referências, você poderá buscá-las assim:
$entities = $entity->get('field_entity_reference')->referencedEntities();
Isso lhe dará uma variedade de entidades.