Puncte:1

Cum pot prelua informații despre adresa URL a solicitării curente?

drapel us

Am nevoie de ajutor pentru a găsi o modalitate de a obține adresa URL a solicitării curente într-un controler și, pe baza acesteia, să schimb numele formularului web din controler.

Codul meu:

'#url' => Url::fromRoute('entity.webform.canonical',['webform' => 'form1'])

În această linie de cod, cum pot comuta între forma1 sau forma2 pe baza faptului că adresa URL de solicitare conține o anumită cale?

Puncte:3
drapel cn

Am nevoie de ajutor pentru a găsi o modalitate de a obține adresa URL a solicitării curente într-un controlor

Într-un controler, obțineți cererea cu un argument indicat de tip Solicitați $request:

<?php

spațiu de nume Drupal\mymodule\Controller;

utilizați Drupal\Core\Controller\ControllerBase;
utilizați Symfony\Component\HttpFoundation\Request;
utilizați Drupal\Core\Url;

clasa ExampleController extinde ControllerBase {

  /**
   * Controller pentru a returna un link către un formular web.
   */
  acțiune de funcție publică (Solicitare $cerere) {

    // calculează $webform cu $request->getPathInfo()

    întoarcere [
      '#type' => 'link',
      '#title' => 'Foo',
      '#url' => Url::fromRoute('entity.webform.canonical', ['webform' => $webform]),
      '#cache' => ['contexts' => ['url.path']],
    ];
  }

}

Puteți obține alte informații din cerere, dar apoi trebuie să ajustați contextul (contextele) cache-ului. Vezi de exemplu https://drupal.stackexchange.com/a/245597/47547

leymannx avatar
drapel ne
Nu trebuie să-l injectați?
4uk4 avatar
drapel cn
Nu, aceasta este cea mai simplă utilizare a unui controler care primește o solicitare și returnează un răspuns.
Puncte:1
drapel cn

Informațiile URL sunt disponibile de la request_stack serviciu. În codul procedural obținerea URL-ului arată astfel:

$url = \Drupal::request()->getRequestUri();

Există, de asemenea, un ajutor pentru a obține parametrii de interogare dacă aveți nevoie de ei, de ex.

if (!empty(\Drupal::request()->query->get('foo'))) {
  
}

În cazul tău ar trebui injectează request_stack service în controlerul dumneavoastră, și obțineți obiectul de solicitare de la acesta getCurrentRequest() metoda (în loc să o obțineți de la \Drupal::cerere() direct).

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.