it-swarm.com.de

Wie leite ich mit RedirectResponse auf eine Bearbeitungsknotenseite um?

Von einem Hook (nicht form_alter) möchte ich den Benutzer auf eine Knotenbearbeitungsseite umleiten (wie mywebsite/node/[nid]/edit). Wie kann ich das mit der Klasse RedirectResponse tun?

Nach der Suche habe ich den folgenden Code gefunden.

new RedirectResponse(\Drupal::url('route.name'));

Wie kann ich den Routennamen für eine Knotenbearbeitungsseite abrufen/finden?

Update:

Nach der Antwort des Cilefen =) Von meinem entity_insert-Hook:

function article_entity_insert(EntityInterface $entity) {
  if ($entity->bundle() == "article"){
    Url::fromRoute('entity.node.edit_form',['node', $entity->id()]); //But when I create a new node, the "view" page is loaded and not the edit page
    dpm($entity->id()); //show the node id
  }
}

Update 2:

Der Befehl

dpm(Url::fromRoute('entity.node.edit_form',['node', $entity->id()]));

rückkehr

Drupal\Core\Url Object
(
    [urlGenerator:protected] => 
    [urlAssembler:protected] => 
    [accessManager:protected] => 
    [routeName:protected] => entity.node.edit_form
    [routeParameters:protected] => Array
        (
            [0] => node
            [1] => 31
        )

    [options:protected] => Array
        (
        )

    [external:protected] => 
    [unrouted:protected] => 
    [uri:protected] => 
    [internalPath:protected] => 
    [_serviceIds:protected] => Array
        (
        )

)

Aber der Befehl

dpm(Url::fromRoute('entity.node.edit_form',['node', $entity->id()])->toString());

Geben Sie diesen Fehler zurück:

[Mon Feb 15 01: 38: 30.081002 2016] [: error] [pid 10219] [client 192.168.1.48:49246] Nicht erfasst PHP Ausnahme Drupal\Core\Entity\EntityStorageException: "Einige obligatorisch Es fehlen Parameter ("Knoten"), um eine URL für die Route "entity.node.edit_form" zu generieren : http://192.168.1.44/system/node/add/article

2
matthieu lopez

Beachten Sie, dass \Drupal::url() veraltet ist. Sie sollten die statischen Methoden der Klasse Url verwenden, um URLs aus Routen zu erstellen.

Um die Routennamen zu finden, verwenden Sie die Drupal Konsole drupal router:debug. Daraus ergab sich:

 entity.node.edit_form  /node/{node}/edit

Ich denke, was Sie brauchen, ist Url::fromRoute('entity.node.edit_form', ['node' => 1]) wobei 1 die zu bearbeitende Knoten-ID ist.

6
cilefen

In Ihrer Controller-Klasse können Sie die Methode redirect () wie folgt verwenden:

return $this->redirect('entity.node.edit_form', ['node' => $node_id]);

Weitere Möglichkeiten hierzu finden Sie unter drupal_goto () wurde entfernt .

Sie müssen nicht mit URLs oder der Konvertierung von Zeichenfolgen herumspielen, wie in der anderen Antwort beschrieben.

3
colan

Du hast:

Url::fromRoute('entity.node.edit_form', ['node', $entity->id()])->toString()
                                               ^^

Ich denke du willst:

Url::fromRoute('entity.node.edit_form', ['node' => $entity->id()])->toString();
                                               ^^^^

Das erste hat ein indiziertes Array als zweiten Parameter für Url :: fromRoute (), das zweite hat ein benanntes Array als zweiten Parameter.

1
Chris Burgess