इस तरह से अनुरोध वस्तु को सीधे एक्सेस करने के बारे में कुछ चेतावनी दी गई हैं \Drupal::request
:
* Note: The use of this wrapper in particular is especially discouraged. Most
* code should not need to access the request directly. Doing so means it
* will only function when handling an HTTP request, and will require special
* modification or wrapping when run from a command line tool, from certain
* queue processors, or from automated tests.
*
* If code must access the request, it is considerably better to register
* an object with the Service Container and give it a setRequest() method
* that is configured to run when the service is created. That way, the
* correct request object can always be provided by the container and the
* service can still be unit tested.
किसी भी रूप नियंत्रक को \Drupal\Core\Form\FormBase
स्वचालित रूप से इस निर्भरता को इंजेक्ट किया जाता है, और इसका उपयोग करके पहुँचा जा सकता है:
$this->getRequest()->getSchemeAndHttpHost()
मुझे लगता है कि (लेकिन परीक्षण नहीं किया गया है) कि एक नियमित पेज नियंत्रक फंक्शन को ओवरराइड करके और फिर कंस्ट्रक्टर में एक संपत्ति सेट करके सेवा \Drupal\Core\Controller\ControllerBase
प्रदान कर सकता है । यह रूपों के लिए वास्तव में अच्छी तरह से वर्णित है, और पेज नियंत्रकों के लिए एक ही प्रक्रिया लागू होनी चाहिए: https://www.drupal.org/docs/8/api/services-and-d dependency- injection/ dependency- injection-for- a- रूप ।request_stack
\Drupal\Core\Controller\ControllerBase::create
$request