Các chức năng tương đương mà tôi nên sử dụng để xử lý HTTP là gì?


17

Nhìn vào các chức năng được liệt kê trong trang xử lý HTTP cho Drupal 7 , tôi nhận thấy rằng các chức năng sau không còn tồn tại trong Drupal 8. (Các liên kết dành cho các trang tài liệu Drupal 7, trong đó các liên kết đến tài liệu Drupal 8 cho các tài liệu đó các chức năng bị thiếu.)

Những chức năng / phương pháp nào tôi nên sử dụng thay thế trong Drupal 8?


1
Đây là câu hỏi là một phần của một loạt các câu hỏi về sự khác biệt giữa Drupal 7 và Drupal 8.
kiamlaluno

Câu trả lời:


16

Đây là các hàm / phương thức / lớp nên được sử dụng trong mã Drupal 8.6.x.

  • drupal_access_denied()đã được thay thế từ lớp AccessDeniedHttpException . Các cuộc gọi lại trang cần trả về lỗi Truy cập bị từ chối nên sử dụng mã tương tự như sau.

    // 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;
      }
    }
  • Thay vì drupal_get_query_array()parse_query()(một chức năng trong GuzzleHttp\Psr7không gian tên), là một phần của Guheads.

  • drupal_goto()đã được thay thế từ các RedirectResponselớp học. Các cuộc gọi lại trang cần chuyển hướng người dùng nên sử dụng mã tương tự như sau. (Lưu ý rằng trình xử lý biểu mẫu không nên sử dụng lớp này.)

    // 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()đã được thay thế từ dịch vụ Drupal 8 thực hiện giao diện ClientInterface . Mã Drupal 8 phải tương tự như mã sau.

    // 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()đã được thay thế từ lớp NotFoundHttpException . Trang gọi lại nên sử dụng mã tương tự như sau.

    // 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() nên được thay thế bởi một thuê bao sự kiện, tương tự như sau.

    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() đã được thay thế bởi UrlHelper::encodePath()
    • drupal_get_query_parameters() đã được thay thế bởi UrlHelper::filterQueryParameters()
    • drupal_http_build_query()đã được thay thế bởi UrlHelper::buildQuery(), sẽ bị xóa sau khi lõi Drupal yêu cầu ít nhất PHP 5.4 (Tại thời điểm đó, có thể sử dụng trực tiếp http_build_query().)
    • drupal_parse_url() đã được thay thế bởi UrlHelper::parse()

Lưu ý rằng, so với các phiên bản Drupal trước đó, có một số thay đổi quan trọng. Ví dụ, một số phương thức trong Urllớp đã được di chuyển trong UrlHelperlớp; một số lớp Guheads không được sử dụng nữa.


Một số liên kết API đã chết.
rudolfbyker

Có thể các chức năng đó đã bị xóa khỏi lõi Drupal. Tôi sẽ kiểm tra liên kết nào đã chết và loại bỏ chúng.
kiamlaluno

Có vẻ như một số liên kết không còn hợp lệ nữa, nhưng lớp / hàm / phương thức vẫn tồn tại. Họ chỉ thay đổi định dạng liên kết hoặc lớp / hàm / phương thức đã được chuyển sang một tệp khác.
kiamlaluno
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.