Bir varlık (örneğin, düğüm) nesnesi için bir alan değerine nasıl erişirim?


63

node_load((int) $nid)tamamen doldurulmuş bir düğüm varlığını yükler. $node->title->valuebaşlığı alır, ancak Drupal 8'deki alan değerlerine nasıl erişirim?

Yanıtlar:


89

$entityBir diziye dönüştürmenize gerek yok sanırım , bu sadece işe yarar.

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

Bilginize: kullanma kint()gelen devel_kintmodül nesne öğelerine erişmek için kullanılabilecek mevcut tüm yöntemler biliyorum, bu yüzden nispeten sağlayacak var_dump()daha az yararlıdır.


14
Aslında şöyle olmalı: $ entity-> get ('field_name') -> value;
Ed Hollinghurst

1
Bunun neden @EdHollinghurst olduğunu biliyor musunuz? getValue benim için gerçekten hata yapıyor, ancak (dpm kullanarak) mevcut yöntemlerde listeleniyor, oysa ki 'değer' değil.
autopoietic

2
getValue()benim için çalışıyor (her ikisi de 8.1.x ve 8.2.x'de) api referansına bakın
leon.nk

16
->getValue()geneldir ve alan türünden bağımsız olarak çalışır. Kullanırsanız ->value, yalnızca alan değeri bir valueözellikte depolandığında çalışır . Daha karmaşık tipler için çalışmaz (örn. Tarih veya işletme referansı).
Pierre Buyle

4
İşletmenin "field_name" adlı bir alanı yoksa, bu kod tek başına bir hata verir. Bu kodun yalnızca alanın bulunduğunu bildiğiniz varlıklarda çalıştırıldığından emin olun, test etmek için $ entity-> hasField ('field_name') 'i veya if (= empty ($ entity-> field_name))
oknate

56

drupal 8'de, $ node, node düğümüdür

 $node->field_machine_name->getValue();

veya

$node->get('field_machine_name')->getValue();

bir dizi değer döndürür.

Yalnızca bir tane beklerseniz, diziyi de

$node->field_machine_name->getString();

veya

 $node->get('field_machine_name')->getString();

Ben "alamadım" (string ve value) "it". Lütfen bu cevabı açıklamak için biraz daha detay ekler misiniz? Bilginize: Bunu yapmamak cevabınızı ılımlılıkla silme riskine sokar (üzgünüm ...)
Pierre.Vriens

34

Alanlar $node->body->valueiçin örneğin kullanabilmelisiniz . Alan adlarının ne olduğunu bilmiyorsanız , Drupal 8 için Devel modülünü kurmanızı ve düğümü benzerleri aracılığıyla incelemenizi öneririm dsm($node).


1
o zaman bu alanı nasıl işliyorsunuz?
Alex,

1
Bu modası geçmiş gibi görünüyor
Alex,

1
@Alex Size yaşadığınız sorunla ilgili yeni bir soru sormanızı öneririm. Bu, iyi bir cevap olduğu zaman, bu sayfadaki cevabın bundan daha fazla puana sahip olduğu cevabını düzenlemek artık uygun görünmüyor.
tenken

5
Güzel bir açıklama için bu makaleye göz atın . Tek bir değer (veya çok değerli alanın ilk anahtarı) almak için $ node-> field_name-> değerini kullanabilirsiniz. Veya bir alanın tüm değerlerini bir dizi olarak almak için $ node-> field_name-> getValue () komutunu kullanabilirsiniz.
Mirsoft

2
@tenken: Aslında, mevcut bir cevabı güncellemek, yeni cevaplarla gereksiz bir soru eklemek yerine tercih edilir.
Pierre Buyle

17

$entity->toArray()Bir varlıkta ne olduğunu görmek için her zaman yapabilirsiniz . Xdebug kullanırken (örneğin phpstorm ile) bir varlık nesnesini kendi başına anlamak çok zordur. dsm($node)Drupal 8'de bir anlam ifade etmekten şüpheliyim . Tarayıcıda hata ayıklama konusunda ısrar ediyorsanız (ancak yapmamalısınız, Drupal 8 xdebug olmadan hata ayıklamak için çok karmaşık) dsm($node->toArray())istediğiniz şey.


$ node-> toArray () benim için Drupal 8'de çalışmıyor.
Axel Briche

Lütfen bunu ayrıntılandıran yeni bir soru ekleyin. Drupal\Core\Entity\EntityInterfacevardır toArray.

1
Bu cevap çözümü sağlamıyor; downvoting.
colan,

Bu cevap mutlaka bu soruya doğrudan bir cevap olmasa da, çok büyük bir fonksiyon. Teşekkürler.
Stef Van Looveren

14

Düğüm alanı değerlerini almak için aşağıdaki kod parçasını kullanın

Bu, düğüm kimliğini url'den almak için kullanılır.

$nid = \Drupal::routeMatch()->getRawParameter($node_id);

Nid kullanarak düğüm verilerini yüklemek için

$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);

Bu alan değerini almak için kullanılır.

$terms = $node->get('field_Name')->getValue();  

Bu, düğüm başlığını almak için kullanılır.

$product_name = $node->getTitle();

2
Düğümü şöyle yükleyin: $ nid = \ Drupal :: routeMatch () -> getRawParameter ('node'); $ node = \ Drupal :: entityTypeManager () -> getStorage ('düğüm') -> load ($ nid);
rémy

8

Benim için, bir $entity(bir düğüm) olan bu çalıştı:

$entity->field_name->getValue();

8.1 kullanarak.


2
Bu, çok değerli bir alanın tüm değerlerini bir diziye alır. Elbette, tek değer alanının değerini elde etmek için de kullanılabilir, ancak çıktı daha sonra tek bir değere sahip bir dizi içerecektir. Bir alanın tek bir değerini (veya çok değerli bir alanın ilk değerini) almak için $ entity-> field_name-> value
Mirsoft

7

Kullanırken (gerçek doğru yol):

$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();


4

Bu sadece:

$node->get('field_name')->getValue()

Alan bir varlık başvuru alanıysa, başvurulan varlıkları elde etmenin bazı özel yolları vardır.

Hedef kimliğini almak için (ilk eleman):

$entity->get('field_entity_reference')->target_id

Yüklenen varlığı almak için (ilk eleman):

$entity->get('field_entity_reference')->entity

->entitySahada kullanılırken , varlık otomatik olarak yüklenir.

Alan birden fazla referans içeriyorsa, hepsini bu şekilde alabilirsiniz:

$entities = $entity->get('field_entity_reference')->referencedEntities();

Bu size bir dizi varlık verecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.