These seem to return the same thing:
\Drupal::request()
$request_stack->getCurrentRequest()
Which is the preferred way to get the current request and why? Is one of these to be deprecated? Any other advantages/disadvantages?
Thanks!
These seem to return the same thing:
\Drupal::request()
$request_stack->getCurrentRequest()
Which is the preferred way to get the current request and why? Is one of these to be deprecated? Any other advantages/disadvantages?
Thanks!
How to get the current request object:
Procedural
In procedural code get the request from the static wrapper \Drupal:
$request = \Drupal::request(); Service
In a service get the current request from the injected argument @request_stack:
The module_name/module_name.services.yml file :
services: custom.service: class: Drupal\module_name\Service\CustomService arguments: - '@request_stack' The module_name/src/Service/CustomService.php file :
use Symfony\Component\HttpFoundation\RequestStack; /** @var \Symfony\Component\HttpFoundation\RequestStack */ protected $requestStack; class customService { public function __construct(RequestStack $requestStack) { $this->requestStack = $requestStack; } public function doSomething() { // use $this->requestStack->getCurrentRequest() } } Controller
In a controller you can pull the request from the route argument stack by including a typed request parameter. An example from UserController:
use Symfony\Component\HttpFoundation\Request; public function resetPass(Request $request, $uid, $timestamp, $hash) { // use $request } It's not necessary to define the route parameter in the route definition. The request is always available.
Form
In a form method get the request from getRequest():
public function submitForm(array &$form, FormStateInterface $form_state) { $request = $this->getRequest(); ... } Don't use the injected requestStack property directly, because it is not available for all Form API callbacks.
@request_stack as argument. You find examples in core.services.yml. $request = $this->getRequest() gets the request from the injected service, but has a fallback in case it is not available.