it-swarm.com.de

Wie führt man eine Umleitung nach einem Stapeljob durch?

Ich arbeite daran, einen Stapelprozess in Drupal 8) einzurichten, der eine Reihe von Remote-Informationen für eine Sammlung von Entitäten sammelt, zwischenspeichert und eine Liste der Ergebnisse auf einer eigenen Seite erstellt Der Batch-Prozess wird mit batch_set() aus einem Formular gestartet.

Der Batch-Job läuft einwandfrei, aber ich bin mir nicht sicher, wie ich die Umleitung am Ende durchführen soll. Da Drupal 8 RedirectResponse-Objekte oder $this->redirect('user.page'); in einem Controller verwendet und der Rückruf für einen Stapeljob keinen Rückgabetyp hat, bin ich mir nicht sicher, was ich verwenden soll Leiten Sie die Umleitung aus.

Ich habe versucht, den Wert url_options der Stapeljobdefinition zu verwenden, aber das funktioniert nicht.

$batch = [
  'title'    => $this->t('job running'),
  'init_message' => $this->t('starting job'),
  'operations'  => $ops,
  'finished' => '\Drupal\my_module\MyClass::finished',
  'url_options' => [
    'query' => [
      'destination' => '/job/results',
    ],
  ],
];
4
acrosman

Anscheinend musste ich fragen, um die Antwort zu sehen: Geben Sie ein RedirectResponse vom Ziel-Rückruf zurück:

public static function finished($success, $results, $operations) {
  if ($success) {
    // Here we do something meaningful with the results.
    $message = t("@count tasks were done.", array(
      '@count' => count($results),
    ));
    drupal_set_message($message);
  }

  return new RedirectResponse('/job/results');
}

Soweit ich das beurteilen kann, handelt es sich um ein undokumentiertes Verhalten.

Aus dem hilfreichen Kommentar unten können Sie auch batch_redirect im Batch-Array, das entweder eine Zeichenfolge oder ein URL-Objekt ist:

$batch = [
  'title'    => $this->t('job running'),
  'init_message' => $this->t('starting job'),
  'operations'  => $ops,
  'finished' => '\Drupal\my_module\MyClass::finished',
  'batch_redirect' => '/job/results',
];
7
acrosman

Dies scheint nicht zu funktionieren, wenn der Stapel in einem Formularübermittlungs-Handler erstellt wird. Der Umleitungsteil in $ batch wird einfach ignoriert.

Das Umleiten vom Submit-Handler wie folgt funktioniert für mich:

$form_state->setRedirect('route.name');
2
Eric Mulder