HTTP हैंडलिंग के लिए मुझे किन समान कार्यों का उपयोग करना चाहिए?


17

Drupal 7 के लिए HTTP हैंडलिंग पृष्ठ में सूचीबद्ध फ़ंक्शनों को देखते हुए , मैंने देखा कि Drupal 8 में अब निम्न कार्य मौजूद नहीं हैं। (लिंक Drupal 7 प्रलेखन पृष्ठों के लिए हैं, जहाँ उन लोगों के लिए Drupal 8 प्रलेखन के लिंक दिए गए हैं। कार्य गायब हैं।)

Drupal 8 में मुझे किन कार्यों / विधियों का उपयोग करना चाहिए?


1
यह सवाल ड्रुपल 7 और Drupal 8. बीच अंतर के बारे सवालों की एक सेरी का एक हिस्सा है
kiamlaluno

जवाबों:


16

ये फ़ंक्शन / विधियाँ / कक्षाएं हैं जिनका उपयोग Drupal 8.6.x कोड में किया जाना चाहिए।

  • drupal_access_denied()AccessDeniedHttpException वर्ग से प्रतिस्थापित किया गया है । पृष्ठ कॉलबैक जिन्हें एक्सेस अस्वीकृत त्रुटि को वापस करने की आवश्यकता है, को निम्नलिखित के समान कोड का उपयोग करना चाहिए।

    // 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;
      }
    }
  • इसके बजाय drupal_get_query_array()वहाँ parse_query()( GuzzleHttp\Psr7नाम स्थान में एक समारोह ) है, जो गज़ल का हिस्सा है।

  • drupal_goto()RedirectResponseवर्ग से बदल दिया गया है । पृष्ठ कॉलबैक जिन्हें उपयोगकर्ताओं को पुनर्निर्देशित करने की आवश्यकता है, उन्हें निम्नलिखित के समान कोड का उपयोग करना चाहिए। (ध्यान दें कि फॉर्म सबमिट करने वाले हैंडलर को इस वर्ग का उपयोग नहीं करना चाहिए।)

    // 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()एक Drupal 8 सेवा से प्रतिस्थापित किया गया है जो ClientInterface इंटरफ़ेस को लागू करता है। Drupal 8 कोड निम्नलिखित के समान होना चाहिए।

    // 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 वर्ग से प्रतिस्थापित किया गया है । पेज कॉलबैक को निम्नलिखित के समान कोड का उपयोग करना चाहिए।

    // 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() निम्नलिखित की तरह एक घटना ग्राहक द्वारा प्रतिस्थापित किया जाना चाहिए।

    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() द्वारा प्रतिस्थापित किया गया है UrlHelper::encodePath()
    • drupal_get_query_parameters() द्वारा प्रतिस्थापित किया गया है UrlHelper::filterQueryParameters()
    • drupal_http_build_query()द्वारा प्रतिस्थापित किया गया है UrlHelper::buildQuery(), जिसे ड्रुपल कोर को कम से कम PHP 5.4 की आवश्यकता होने पर हटा दिया जाएगा (उस बिंदु पर, इसका सीधे उपयोग करना संभव होगा http_build_query()।)
    • drupal_parse_url() द्वारा प्रतिस्थापित किया गया है UrlHelper::parse()

ध्यान दें कि, पहले के Drupal संस्करणों की तुलना में, कुछ महत्वपूर्ण बदलाव हैं। उदाहरण के लिए, कुछ विधियाँ जो Urlकक्षा में थीं, उन्हें कक्षा में स्थानांतरित कर दिया गया है UrlHelper; कुछ गुज़्ज़ल वर्ग अब उपयोग नहीं किए जाते हैं।


एपीआई लिंक में से कुछ मर चुके हैं।
रुडोल्फबाइकर

यह संभावित है कि उन कार्यों को द्रुपाल कोर से हटा दिया गया है। मैं जांच करूंगा कि कौन से लिंक मृत हैं और उन्हें हटा दें।
kiamlaluno

यह भी लगता है कि कुछ लिंक अब मान्य नहीं हैं, लेकिन वर्ग / कार्य / विधि अभी भी मौजूद है। वे बस लिंक प्रारूप को बदलते हैं, या वर्ग / फ़ंक्शन / विधि को एक अलग फ़ाइल में ले जाया गया है।
kiamlaluno
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.