it-swarm.com.de

\ Drupal :: request () vs $ request_stack-> getCurrentRequest ()

Diese scheinen dasselbe zurückzugeben:

\Drupal::request()

$request_stack->getCurrentRequest()

Welches ist der bevorzugte Weg, um die aktuelle Anfrage zu erhalten und warum? Ist eine davon veraltet? Irgendwelche anderen Vor-/Nachteile?

Vielen Dank!

7
Delford Chaffin

So erhalten Sie das aktuelle Anforderungsobjekt:

prozedural

Im Prozedurcode erhalten Sie die Anfrage vom statischen Wrapper \Drupal:

$request = \Drupal::request();

Service

In einem Dienst erhalten Sie die Anforderung vom injizierten Anforderungsstapel:

$request = $this->requestStack->getCurrentRequest();

Controller

In einem Controller können Sie die Anforderung aus dem Routenargumentstapel abrufen, indem Sie einen typisierten Anforderungsparameter einfügen. Ein Beispiel aus UserController:

use Symfony\Component\HttpFoundation\Request;

  public function resetPass(Request $request, $uid, $timestamp, $hash) {          
    // use $request
  }

Es ist nicht erforderlich, den Routenparameter in der Routendefinition zu definieren. Die Anfrage ist immer verfügbar.

Formular

In einer Formularmethode erhalten Sie die Anfrage von getRequest():

  public function submitForm(array &$form, FormStateInterface $form_state) {
    $request = $this->getRequest();
    ...
  }

Verwenden Sie die injizierte requestStack-Eigenschaft nicht direkt, da sie nicht für alle Form-API-Rückrufe verfügbar ist.

11
4k4