Rainer Feike의 답변 덕분에 해결책을 찾았습니다 .
<?php
public function build() {
$node = \Drupal::routeMatch()->getParameter('node');
$build = array();
$markup = array();
$fieldsToRender = array(
'field_node_ref', 'field_foo', 'field_bar',
);
$viewmode = 'default';
$entityType = 'node';
$display = entity_get_display($entityType, $node->getType(), $viewmode);
$viewBuilder = \Drupal::entityTypeManager()->getViewBuilder($entityType);
foreach ($fieldsToRender as $field_name) {
if (isset($node->{$field_name}) && $field = $node->{$field_name}) {
$fieldRenderable = $viewBuilder->viewField($field, $display->getComponent($field_name));
if (count($fieldRenderable) &&! empty($fieldRenderable)) {
$markup[] = \Drupal::service('renderer')->renderRoot($fieldRenderable);
}
}
}
if (count($markup)) {
$build = array(
'#type' => 'markup',
'#markup' => implode("", $markup),
);
}
return $build;
}
를 사용하면 $viewBuilder->viewField
필요한 모든 필드를 별도로 렌더링 할 수 있습니다. 보기 모드 설정에 따라 캐싱을 추가하는 방법을 찾아야하지만 이것은 또 다른 질문입니다. :)
$nodeview
이#node
키로