J'ai une liste restreinte d'états:
AL|Alabama
AK|Alaska
AZ|Arizona
AR|Arkansas
Dans le code pour accéder à la valeur d'état sélectionnée, je peux exécuter du code comme ceci:
...
$entity->get('field_state')->value;
...
J'obtiens les valeurs comme AL ou AK. Comment puis-je obtenir des étiquettes comme l'Alabama ou l'Alaska?
Je ne sais pas s'il y a une meilleure façon mais j'ai obtenu la valeur en obtenant d'abord les valeurs autorisées.
$allowed_values = $state->getFieldDefinition('field_state')->getFieldStorageDefinition()->getSetting('allowed_values');
$state_value = $state->get('field_state')->value;
$info['state_name'] = $allowed_values[$state_value];
La bonne façon est d'utiliser la fonction options_allowed_values (). Parce que le champ peut ne pas avoir de paramètre "valeurs_autorisées" et des options peuvent être fournies via la fonction "valeurs_autorisées".
Exemples en direct:
Cas # 1: Vous avez un objet entité et souhaitez obtenir une étiquette de la valeur du champ avec des options.
$field_name = 'field_state';
/** @var \Drupal\Core\Field\FieldStorageDefinitionInterface $field_definition */
$field_definition = $entity->{$field_name}->getFieldDefinition();
// This is a list (array) of options for the field definition:
// [{option1_key} => {option1_value}, {option2_key} => {option2_value}, ...]
$field_allowed_options = options_allowed_values($field_definition, $entity);
// If the field is NOT multiple.
/** @var string|\Drupal\Component\Render\MarkupInterface $field_value_label */
$field_value_label = $field_allowed_options[$entity->{$field_name}->value];
// If the field is multiple.
$field_value = array_column($entity->{$field_name}->getValue(), 'value', 'value');
/** @var string[]|\Drupal\Component\Render\MarkupInterface[] $field_value_labels */
$field_value_labels = array_intersect_key($field_allowed_options, $field_value);
Cas # 2: Vous n'avez pas d'objet entité mais vous voulez obtenir une liste de toutes les options autorisées du champ de l'entité.
$entity_type_id = 'node';
$field_name = 'field_state';
$entity_fields_definitions = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions($entity_type_id);
/** @var \Drupal\Core\Field\FieldStorageDefinitionInterface $field_definition */
$field_definition = $entity_fields_definitions[$field_name];
$field_allowed_options = options_allowed_values($field_definition);
drupal 7 voies:
$jid = $row->job_id_181;
if($jid)
{
$jobNode = node_load($params['jid']);
$key = $jobNode->field_job_location['und'][0]['value'];//2
if($key)
{
$field = field_info_field('field_job_location');
$label = $field['settings']['allowed_values'][$key];
echo $label;
}
}
J'espère que cela aidera quelqu'un à l'avenir.
Cela pourrait aussi aider:
$node->field_state->getFieldDefinition()->getSetting('allowed_values');