Quelles sont les fonctions équivalentes à utiliser pour la gestion HTTP?

17

En regardant les fonctions répertoriées dans la page de gestion HTTP pour Drupal 7 , j'ai remarqué que les fonctions suivantes n'existent plus dans Drupal 8. (Les liens sont pour les pages de documentation Drupal 7, où les liens vers la documentation Drupal 8 pour ceux fonctions manquantes.)

Quelles fonctions / méthodes dois-je utiliser à la place dans Drupal 8?

kiamlaluno
la source
1
Cette question fait partie d'une série de questions sur les différences entre Drupal 7 et Drupal 8.
kiamlaluno

Réponses:

16

Ce sont les fonctions / méthodes / classes qui doivent être utilisées dans le code Drupal 8.6.x.

  • drupal_access_denied()a été remplacé à partir de la classe AccessDeniedHttpException . Les rappels de page qui doivent renvoyer l'erreur Accès refusé doivent utiliser un code similaire au suivant.

    // system_batch_page()
    public function batchPage(Request $request) {
      require_once $this->root . '/core/includes/batch.inc';
      $output = _batch_page($request);
      if ($output === FALSE) {
        throw new AccessDeniedHttpException();
      }
      elseif ($output instanceof Response) {
        return $output;
      }
      elseif (isset($output)) {
        $title = isset($output['#title']) ? $output['#title'] : NULL;
        $page = [
          '#type' => 'page',
          '#title' => $title,
          '#show_messages' => FALSE,
          'content' => $output,
        ];
    
        // Also inject title as a page header (if available).
        if ($title) {
          $page['header'] = [
            '#type' => 'page_title',
            '#title' => $title,
          ];
        }
        return $page;
      }
    }
  • Au lieu de cela, drupal_get_query_array()il y a parse_query()(une fonction dans l' GuzzleHttp\Psr7espace de noms), qui fait partie de Guzzle.

  • drupal_goto()a été remplacé de la RedirectResponseclasse. Les rappels de page qui doivent rediriger les utilisateurs doivent utiliser un code similaire au suivant. (Notez que les gestionnaires de soumission de formulaire ne doivent pas utiliser cette classe.)

    // AddSectionController::build()
    public function build(SectionStorageInterface $section_storage, $delta, $plugin_id) {
      $section_storage
        ->insertSection($delta, new Section($plugin_id));
      $this->layoutTempstoreRepository
        ->set($section_storage);
      if ($this->isAjax()) {
        return $this->rebuildAndClose($section_storage);
      }
      else {
        $url = $section_storage->getLayoutBuilderUrl();
        return new RedirectResponse($url->setAbsolute()->toString());
      }
    }
  • drupal_http_request()a été remplacé à partir d'un service Drupal 8 qui implémente l' interface ClientInterface . Le code Drupal 8 devrait être similaire au suivant.

    // system_retrieve_file()
    try {
      $data = (string) \Drupal::httpClient()->get($url)->getBody();
      $local = $managed ? file_save_data($data, $path, $replace) : file_unmanaged_save_data($data, $path, $replace);
    } catch (RequestException $exception) {
      \Drupal::messenger()->addError(t('Failed to fetch file due to error "%error"', ['%error' => $exception->getMessage()]));
      return FALSE;
    }
  • drupal_not_found()a été remplacé à partir de la classe NotFoundHttpException . Les rappels de page doivent utiliser un code similaire au suivant.

    // BookController::bookExport()
    public function bookExport($type, NodeInterface $node) {
      $method = 'bookExport' . Container::camelize($type);
    
      // @todo Convert the custom export functionality to serializer.
      if (!method_exists($this->bookExport, $method)) {
        $this->messenger()->addStatus(t('Unknown export format.'));
        throw new NotFoundHttpException();
      }
      $exported_book = $this->bookExport->{$method}($node);
      return new Response($this->renderer->renderRoot($exported_book));
    }
  • drupal_site_offline() doit être remplacé par un abonné à l'événement, similaire au suivant.

    public static function getSubscribedEvents() {
      $events[KernelEvents::REQUEST][] = ['onKernelRequestMaintenance', 30];
      $events[KernelEvents::EXCEPTION][] = ['onKernelRequestMaintenance'];
      return $events;
    }
    
    public function onKernelRequestMaintenance(GetResponseEvent $event) {
      $request = $event->getRequest();
      $route_match = RouteMatch::createFromRequest($request);
      if ($this->maintenanceMode->applies($route_match)) {
        // Don't cache maintenance mode pages.
        \Drupal::service('page_cache_kill_switch')->trigger();
        if (!$this->maintenanceMode->exempt($this->account)) {
          // Deliver the 503 page if the site is in maintenance mode and the
          // logged in user is not allowed to bypass it.
          // If the request format is not 'html' then show default maintenance
          // mode page else show a text/plain page with maintenance message.
          if ($request->getRequestFormat() !== 'html') {
            $response = new Response($this->getSiteMaintenanceMessage(), %03, ['Content-Type' => 'text/plain']);
            $event->setResponse($response);
            return;
          }
          drupal_maintenance_theme();
          $response = $this->bareHtmlPageRenderer->renderBarePage([          '#markup' => $this->getSiteMaintenanceMessage()], $this->t('Site under maintenance'), 'maintenance_page');
          $response->setStatusCode(503);
          $event->setResponse($response);
        }
        else {
          // Display a message if the logged in user has access to the site in
          // maintenance mode. However, suppress it on the maintenance mode
          // settings page.
          if ($route_match->getRouteName() != 'system.site_maintenance_mode') {
            if ($this->account->hasPermission('administer site configuration')) {
              $this->messenger->addMessage($this
          ->t('Operating in maintenance mode. <a href=":url">Go online.</a>', [':url' => $this->urlGenerator->generate('system.site_maintenance_mode')]), 'status', FALSE);
            }
            else {
              $this->messenger->addMessage($this->t('Operating in maintenance mode.'), 'status', FALSE);
            }
          }
        }
      }
    }
    • drupal_encode_path() a été remplacé par UrlHelper::encodePath()
    • drupal_get_query_parameters() a été remplacé par UrlHelper::filterQueryParameters()
    • drupal_http_build_query()a été remplacé par UrlHelper::buildQuery(), qui sera supprimé une fois que le noyau Drupal aura besoin d'au moins PHP 5.4 (À ce stade, il sera possible de l'utiliser directement http_build_query().)
    • drupal_parse_url() a été remplacé par UrlHelper::parse()

Notez que, par rapport aux versions précédentes de Drupal, il y a des changements importants. Par exemple, certaines méthodes qui étaient dans la Urlclasse ont été déplacées dans la UrlHelperclasse; certaines classes de Guzzle ne sont plus utilisées.

kiamlaluno
la source
Certains liens API sont morts.
rudolfbyker
Il est probable que ces fonctions ont été supprimées du noyau Drupal. Je vais vérifier quels liens sont morts et les supprimer.
kiamlaluno
Il semble également que certains des liens ne soient plus valides, mais la classe / fonction / méthode existe toujours. Ils changent simplement le format du lien, ou la classe / fonction / méthode a été déplacée vers un autre fichier.
kiamlaluno