it-swarm.com.de

Wie erstelle ich eine RedirectResponse mit einem Zielabfrageparameter?

Das funktioniert:

$redirectURL = '/cart/add/p2';
return new RedirectResponse(base_path().$redirectURL);

Das Problem ist, ich möchte das:

$redirectURL = '/cart/add/p2?destination=somewhere';

In dem Moment, in dem ich destination = irgendwo hinzugefügt habe, erhalte ich folgende Fehlermeldung:

InvalidArgumentException: The internal path component 'http://localhost/XXXX/public_html/XXXX/XXXX' is invalid. Its path component must have a leading slash, e.g. internal:/foo. in Drupal\Core\Url::fromInternalUri() (line 404 of C:\ampps\www\XXXX\public_html\core\lib\Drupal\Core\Url.php).

Wenn ich dies jedoch tue:

$redirectURL = '/cart/add/p2?SOMETHING_ELSE=somewhere';

Dann funktioniert es. Mit anderen Worten, es bricht speziell ab, wenn ich "Ziel = irgendwo" hinzufüge.

Warum sollte es daran brechen und wie komme ich darum herum? Das heißt, Wie leite ich zu einer URL mit destination = irgendwo in der Abfragezeichenfolge um?.

Zu Ihrer Information: Wenn ich das zum Laufen bringen kann, kann ich "Cart Links" verwenden, um Dinge zu einem Warenkorb hinzuzufügen und den Benutzer gleichzeitig umzuleiten, was mein Leben viel einfacher macht.

4
coderama

Verwenden Sie besser eine Route, damit die Pfadverarbeitung in Drupal ihre Aufgabe erfüllen kann. Wenn custom.cart_add ist der Weg zu /cart/add/{page} gibt dies eine Umleitungsantwort mit einem Zielabfrageparameter von einem Controller zurück:

  return $this->redirect(
    'custom.cart_add',
    ['page' => 'p2'],
    [
      'query' => ['destination' => 'somewhere'],
      'absolute' => TRUE,
    ]
  );
7
4k4

Versuchen Sie diesen Code.


$path = Drupal\Core\URL::fromUserInput('/cart/add/p2', array('query' => array('SOMETHING_ELSE' => 'somewhere')))->toString();
$response = new RedirectResponse($path);
$response->send();
4
Jeetendra Kumar
$redirectURL = '/cart/add/p2';
return new RedirectResponse(base_path().$redirectURL);

Der obige Code erzeugt einen doppelten Schrägstrich vor dem Element cart, da base_path() am Ende des zurückgegebenen Pfads immer einen Schrägstrich hinzufügt. Sie müssen den Schrägstrich aus der Variablen $redirectURL Entfernen, damit er ordnungsgemäß funktioniert.

3
ya.teck

Dieses vollständige Beispiel könnte helfen:

use Symfony\Component\HttpFoundation\RedirectResponse;

$target = 65; // a parameter you want to add
$url = Url::fromUri('internal:/node/add/page'); // choose a path
$link_options = array(
  'attributes' => array(
     'class' => array(
        'btn',
     ),
   ),
   'query' => array(
     'target' => $target
   )
);
$url->setOptions($link_options);
$destination = $url->toString();

$response = new RedirectResponse($destination);
$response->send();
2