protected function AjaxCommentsController::renderCommentField in AJAX Comments 8
Build a comment field render array for the ajax response.
Parameters
\Drupal\Core\Entity\EntityInterface $entity: The entity that has the comment field.
string $field_name: The machine name of the comment field.
Return value
array A render array for the updated comment field.
1 call to AjaxCommentsController::renderCommentField()
- AjaxCommentsController::buildCommentFieldResponse in src/Controller/ AjaxCommentsController.php 
- Create an ajax response to replace the comment field.
File
- src/Controller/ AjaxCommentsController.php, line 135 
Class
- AjaxCommentsController
- Controller routines for AJAX comments routes.
Namespace
Drupal\ajax_comments\ControllerCode
protected function renderCommentField(EntityInterface $entity, $field_name) {
  $comment_field = $entity
    ->get($field_name);
  // Load the display settings to ensure that the field formatter
  // configuration is properly applied to the rendered field when it is
  // returned in the ajax response.
  $display_options = $this->entityTypeManager
    ->getStorage('entity_view_display')
    ->load($entity
    ->getEntityTypeId() . '.' . $entity
    ->bundle() . '.default')
    ->getComponent($field_name);
  $comment_display = $comment_field
    ->view($display_options);
  // To avoid infinite nesting of #theme_wrappers elements on subsequent
  // ajax responses, unset them here.
  unset($comment_display['#theme_wrappers']);
  // Remove unneeded route parameters.
  unset($comment_display[0]['comments']['pager']['#route_parameters']['entity_type']);
  unset($comment_display[0]['comments']['pager']['#route_parameters']['entity']);
  unset($comment_display[0]['comments']['pager']['#route_parameters']['field_name']);
  unset($comment_display[0]['comments']['pager']['#route_parameters']['pid']);
  $entity_type = $entity
    ->getEntityType();
  // For replies, the passed $entity is the parent comment.
  // However, for the pager we want the parent entity.
  if ($entity_type
    ->id() === 'comment') {
    $entity = $entity
      ->getCommentedEntity();
    $entity_type = $entity
      ->getEntityType();
  }
  $handler = $this
    ->entityTypeManager()
    ->getRouteProviders($entity_type
    ->id())['html'];
  $route_collection = $handler
    ->getRoutes($entity_type);
  $name = 'entity.' . $entity_type
    ->get('id') . '.canonical';
  $route = $route_collection
    ->get($name);
  // Override the ajax route object with the actual entity route.
  $entity_url = $entity
    ->toURL();
  if ($route) {
    $comment_display[0]['comments']['pager']['#route_name'] = $route;
    $comment_display[0]['comments']['pager']['#route_parameters'] = $entity_url
      ->getRouteParameters();
  }
  return $comment_display;
}