มีคำเตือนบางอย่างเกี่ยวกับการเข้าถึงวัตถุคำขอโดยตรงด้วยวิธีนี้ใน\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
สามารถให้request_stack
บริการโดยการแทนที่\Drupal\Core\Controller\ControllerBase::create
ฟังก์ชั่นแล้วตั้งค่า$request
คุณสมบัติในตัวสร้าง นี่เป็นคำอธิบายที่ดีมากสำหรับแบบฟอร์มและกระบวนการเดียวกันควรใช้กับตัวควบคุมหน้า: https://www.drupal.org/docs/8/api/services-and-dependency-injection/dependency-injection-for-a- ฟอร์ม