Каковы эквивалентные функции, которые я должен использовать для обработки HTTP?

Глядя на страницу HTTP-обработки для Drupal 8 , Я замечаю, что следующие функции больше не перечислены:

Какие функции /методы следует использовать в Drupal 8?

8
14 голосов | спросил kiamlaluno 28 PM000000110000005631 2013, 23:11:56

1 ответ


12

Эти функции были заменены на методы, определенные в классах, классах или обработчиках событий.

  • drupal_access_denied() был заменен на AccessDeniedHttpException . Обратные вызовы страниц, которые должны возвращать ошибку Access Denied, должны использовать код, похожий на следующий.

    // system_batch_page()
    $output = _batch_page();
    
    if ($output === FALSE) {
      throw new AccessDeniedHttpException();
    }
    elseif ($output instanceof Response) {
      return $output;
    }
    
  • drupal_get_query_array() был заменен на QueryString , который является частью Guzzle. Чтобы получить объект QueryString, код должен вызвать QueryString :: fromString () передает строку запроса методу. Возвращаемый объект реализует интерфейс ArrayAccess, но для получения ключей запроса могут использоваться другие методы, такие как:

    • Коллекция :: getIterator () возвращает объект ArrayIterator, который может использоваться для итерации по ключам запроса
    • Коллекция :: get () возвращает определенный ключ
    • Collection :: getAll () возвращает все ключи или определенное подмножество, которое соответствует значениям, содержащимся в массиве, переданным в качестве аргумента методу
    • Collection :: filter () возвращает объект, содержащий те ключи, для которых закрытие, переданное как аргумент методу, возвращает TRUE
  • drupal_goto() был заменен на RedirectResponse . Обратные обратные вызовы страниц, которые должны перенаправлять пользователей, должны использовать код, похожий на следующий.

    // UserController::userPage()
    global $user;
    if ($user->id()) {
      $response = new RedirectResponse(url('user/' . $user->id(), array('absolute' => TRUE)));
    }
    else {
      $response = drupal_get_form(UserLoginForm::create($this->container), $request);
    }
    return $response;
    
  • drupal_http_request() был заменен из службы Drupal 8, которая реализует ClientInterface . Код Drupal 8 должен быть похож на следующий.

    // system_retrieve_file()
    try {
      $data = Drupal::httpClient()->get($url)->send()->getBody(TRUE);
      $local = $managed ? file_save_data($data, $path, $replace) : file_unmanaged_save_data($data, $path, $replace);
    }
    catch (BadResponseException $exception) {
      $response = $exception->getResponse();
      drupal_set_message(t('Failed to fetch file due to HTTP error "%error"', array('%error' => $response->getStatusCode() . ' ' . $response->getReasonPhrase())), 'error');
      return FALSE;
    }
    catch (RequestException $exception) {
      drupal_set_message(t('Failed to fetch file due to error "%error"', array('%error' => $exception->getMessage())), 'error');
      return FALSE;
    }
    
  • drupal_not_found() был заменен на NotFoundHttpException . Обратные вызовы страниц должны использовать код, похожий на следующий.

    // book_export()
    $type = drupal_strtolower($type);
    
    $export_function = 'book_export_' . $type;
    
    if (function_exists($export_function)) {
      print call_user_func($export_function, $node);
    }
    else {
      drupal_set_message(t('Unknown export format.'));
      throw new NotFoundHttpException();
    }
    
  • drupal_site_offline() должен быть заменен подписчиком событий, как это предлагается в комментариях кода для MaintenanceModeSubscriber :: getSubscribedEvents () .

    static function getSubscribedEvents() {
      // In order to change the maintenance status an event subscriber with a
      // priority between 30 and 40 should be added.
      $events[KernelEvents::REQUEST][] = array('onKernelRequestDetermineSiteStatus', 40);
      $events[KernelEvents::REQUEST][] = array('onKernelRequestMaintenance', 30);
      return $events;
    }
    

Обратите внимание, что большинство функций public , перечисленных на странице обработки HTTP, устарели, а вызовы этих функций должны быть заменены вызовами эквивалентных методов.

ответил kiamlaluno 29 AM000000120000000331 2013, 00:34:03

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132