예제 #1
0
 /**
  * Invokes the page attachment hooks.
  *
  * @param array &$page
  *   A #type 'page' render array, for which the page attachment hooks will be
  *   invoked and to which the results will be added.
  *
  * @throws \LogicException
  *
  * @internal
  *
  * @see hook_page_attachments()
  * @see hook_page_attachments_alter()
  */
 public function invokePageAttachmentHooks(array &$page)
 {
     // Modules can add attachments.
     $attachments = [];
     foreach ($this->moduleHandler->getImplementations('page_attachments') as $module) {
         $function = $module . '_page_attachments';
         $function($attachments);
     }
     if (array_diff(array_keys($attachments), ['#attached', '#cache']) !== []) {
         throw new \LogicException('Only #attached and #cache may be set in hook_page_attachments().');
     }
     // Modules and themes can alter page attachments.
     $this->moduleHandler->alter('page_attachments', $attachments);
     \Drupal::theme()->alter('page_attachments', $attachments);
     if (array_diff(array_keys($attachments), ['#attached', '#cache']) !== []) {
         throw new \LogicException('Only #attached and #cache may be set in hook_page_attachments_alter().');
     }
     // Merge the attachments onto the $page render array.
     $page = $this->renderer->mergeBubbleableMetadata($page, $attachments);
 }