Entity_metadata_wrapper ile yeni bir değeri dizi olan bir varlık alanına kaydedin


9

Bir varlık üzerinde bir alana yeni bir değer kaydetmeniz gerekiyor ve entity_metadata_wrapper kullanmak mümkün mü yoksa sadece mevcut bir değer ayarlamak mümkün mü merak ediyordum?


bu şekilde $ wrapper-> vimn_related_subjects-> set (dizi ($ key)) değerini ayarladım; ama dizinin sonuna bir değer eklemek istersem? mümkün mü?
Andrew Welch

Denedin $wrapper->vimn_related_subjects[] = $value;mi
Clive

Yanıtlar:


31

Çok değerli alanlarla uğraşırken, ilişkili varlık meta veri sarmalayıcı nesnesi EntityListWrapper örneğidir (Kullanılabilir yöntemlere bakmak için API'ye göz atmak iyi bir fikir olabilir. Ayrıca bu sınıfın ArrayAccess arabirimini uyguladığını unutmayın )

EntityListWrapper'a yeni değerler eklemenin en basit yolu "[]" operatörünü kullanmaktır:

$wrapper->field_example[] = $new_value;

Bu yeni bir giriş oluşturur ve girişe değer atar. Bu yöntemlerle, delta (değer listesindeki ofset) otomatik olarak oluşturulur. İsterseniz ofseti kendiniz de ayarlayabilirsiniz. Aşağıdaki üç yöntemden herhangi biri eşdeğerdir:

$wrapper->field_example[$delta] = $new_value;
$wrapper->field_example->offsetSet($delta, $new_value);
$wrapper->field_example->get($delta)->set($new_value);

Üç durumda da, delta zaten varsa değerlerin üzerine yazar ve yoksa yeni bir giriş oluşturur.

Ayrıca, alanın kendisinde doğrudan bir değer dizisi ayarlayabilirsiniz. Her iki yöntem de eşdeğerdir:

$value = array
  0 => array('property_example' => 'hello'),
  1 => array('property_example' => 'world')
);
$wrapper->field_example = $value;
$wrapper->field_example->set($value);

Ancak bu, alanın meta veri sarmalayıcısını kullanmadığınız için atadığınız alanın iç yapısını bilmenizi gerektirir.

Son olarak, çok değerli bir alanı boş bir değere ayarlayarak boşaltabilirsiniz. Üç yöntemin hepsi eşdeğerdir:

$wrapper->field_example->set();
$wrapper->field_example = array();
$wrapper->field_example = NULL;

"EntityMetadataWrapperException: Bilinmeyen veri özelliği Array. EntityStructureWrapper-> getPropertyInfo ()" Belirli bir dili hedeflememe rağmen ikinci yaklaşım deniyorum. yani, $ wrapper-> dil ($ lang) -> {$ field} -> set ($ new_array);
AlxVallejo

$w->field_allowed_regions->set(array(null));çok değerli sınıflandırma referans alanım için çalışan tek temizleme seçeneğidir.
İnanılmaz

3

onu buldum

$wrapper->field_example[]->set($new_value);

ölümcül bir başarısızlıktı. Fakat

$wrapper->field_example[NULL]->set($new_value);

izin verildi.

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.