drupal 8 – Cómo acceder correctamente a los elementos de la entidad en una plantilla de ramitas

Pregunta:

Tengo una serie de entidades que me gustaría representar en una lista.

$ids = \Drupal::entityQuery('chemical')
  ->condition('tid', $tid)
  ->execute();
$controller = \Drupal::entityManager()->getStorage('chemical');
$entities = $controller->loadMultiple($ids);

$chemicals = [];
foreach ($entities as $entity){
  $chemicals[] = ['id' => $entity->id(), 'label' => $entity->label()];
}

$output[] = [
  '#theme' => 'chemical_taxonomy',
  '#chemicals' => $chemicals,
];
return $output;

La plantilla de ramitas luego crea la lista desordenada de URL usando la matriz de {{ chemicals.label }} y {{ chemicals.id }} . Sin embargo, debería poder pasar $entities a la plantilla en lugar de extraer la identificación y la etiqueta y construir una nueva matriz, ¿no?

Si reemplazo '#chemicals' => $chemicals con '#chemicals' => $entities , recibo un error:

Uncaught PHP Exception Exception: "Object of type Drupal\\Core\\Field\\FieldItemList cannot be printed." at /var/www/Drupal_Sites/console/core/lib/Drupal/Core/Template/TwigExtension.php line 443,   

Respuesta:

Como explica la excepción, intentó imprimir un objeto que no se puede renderizar y no se puede convertir en una cadena. En este caso fue Drupal\Core\Field\FieldItemList que es el objeto devuelto por las entidades de drupal cuando solicita un campo ( {{ entity.id }} / {{ entity.label }} ).

Para obtener el valor real, debe llamar a los métodos de su entidad (el valor real de los campos está protegido del acceso externo).

El camino largo:

{{ entity.get('id').get(0).get('value').getValue() }}

Lo anterior es la ruta real que debe tomar para ir del objeto de la entidad al valor del campo de identificación.

Sin embargo, drupal proporciona atajos a través de lo que se conoce como propiedades mágicas. El camino corto

{{ entity.id.value }}

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım