HTTP işlemleri için kullanmam gereken eşdeğer işlevler nelerdir?


17

Drupal 7 için HTTP kullanma sayfasında listelenen işlevlere baktığımda , aşağıdaki işlevlerin Drupal 8'de artık mevcut olmadığını fark ettim. (Bağlantılar, Drupal 8 belge sayfalarına yöneliktir; işlevler eksik.)

Bunun yerine Drupal 8'de hangi işlevleri / yöntemleri kullanmalıyım?


1
Bu soru Drupal 7 ve Drupal 8 arasındaki farklar hakkında bir dizi soru parçasıdır
kiamlaluno

Yanıtlar:


16

Bunlar Drupal 8.6.x kodunda kullanılması gereken işlevler / yöntemler / sınıflardır.

  • drupal_access_denied()AccessDeniedHttpException sınıfından değiştirildi . Erişim Reddedildi hatasını döndürmesi gereken sayfa geri çağrıları, aşağıdakine benzer bir kod kullanmalıdır.

    // 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;
      }
    }
  • Yerine drupal_get_query_array()var parse_query()(bir işlev GuzzleHttp\Psr7guzzle parçası olan ad).

  • drupal_goto()RedirectResponsesınıftan değiştirildi . Kullanıcıları yeniden yönlendirmesi gereken sayfa geri çağrıları, aşağıdakine benzer bir kod kullanmalıdır. (Form gönderme işleyicilerinin bu sınıfı kullanmaması gerektiğine dikkat edin.)

    // 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(), ClientInterface arabirimini uygulayan bir Drupal 8 hizmetinden değiştirilmiştir . Drupal 8 kodu aşağıdakine benzer olmalıdır.

    // 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()NotFoundHttpException sınıfından değiştirildi . Sayfa geri çağrılarında aşağıdakine benzer bir kod kullanılmalıdır.

    // 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() aşağıdakine benzer bir etkinlik abonesi ile değiştirilmelidir.

    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);
            }
          }
        }
      }
    }

Önceki Drupal sürümleriyle karşılaştırıldığında, bazı önemli değişiklikler olduğuna dikkat edin. Örneğin, Urlsınıfta bulunan bazı yöntemler sınıfta taşınmıştır UrlHelper; Guzzle sınıflarından bazıları artık kullanılmıyor.


API bağlantılarından bazıları öldü.
rudolfbyker

Bu işlevlerin Drupal çekirdekten kaldırılmış olması muhtemeldir. Hangi bağlantıların öldüğünü kontrol edip kaldıracağım.
kiamlaluno

Bazı bağlantıların artık geçerli olmadığı anlaşılıyor, ancak sınıf / işlev / yöntem hala var. Sadece bağlantı biçimini değiştirirler veya sınıf / işlev / yöntem farklı bir dosyaya taşınmıştır.
kiamlaluno
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.