Lorsqu'il s'agit de champs à valeurs multiples, l'objet wrapper de métadonnées d'entité associé est une instance d' EntityListWrapper (il peut être judicieux de parcourir l'API pour consulter les méthodes disponibles. Notez également que cette classe implémente l' interface ArrayAccess )
Ainsi, la façon la plus simple d'ajouter de nouvelles valeurs à un EntityListWrapper est d'utiliser l'opérateur "[]":
$wrapper->field_example[] = $new_value;
Cela crée une nouvelle entrée et lui affecte la valeur. Avec ces méthodes, le delta (l'offset dans la liste de valeurs) est créé automatiquement. Vous pouvez également régler le décalage vous-même si vous le souhaitez. L'une des trois méthodes suivantes est équivalente:
$wrapper->field_example[$delta] = $new_value;
$wrapper->field_example->offsetSet($delta, $new_value);
$wrapper->field_example->get($delta)->set($new_value);
Dans les trois cas, cela écrasera les valeurs si le delta existe déjà et créera une nouvelle entrée dans le cas contraire.
Vous pouvez également définir directement un tableau de valeurs sur le champ lui-même. Les deux méthodes sont équivalentes:
$value = array
0 => array('property_example' => 'hello'),
1 => array('property_example' => 'world')
);
$wrapper->field_example = $value;
$wrapper->field_example->set($value);
Cependant, cela nécessite que vous connaissiez la structure interne du champ auquel vous vous affectez car vous n'utilisez pas l'encapsuleur de métadonnées du champ.
Enfin, vous pouvez vider un champ à valeurs multiples en le définissant sur une valeur vide. Les trois méthodes sont équivalentes:
$wrapper->field_example->set();
$wrapper->field_example = array();
$wrapper->field_example = NULL;