it-swarm.com.de

Ruft die aktuelle Knoten-ID vom Controller ab

Ich erstelle ein Modul mit reactjs und muss die aktuelle Knoten-ID von einem Controller abrufen, damit ich bestimmte Aufgaben basierend auf der Knoten-ID ausführen kann. Ich erhalte jedoch immer einen Nullwert, mein Routing funktioniert ordnungsgemäß und meine Funktion lautet wie folgt:

  public function currentNodeId()
    {
        // get current node
        $node_id = \Drupal::routeMatch()->getParameter('node')->Id();

        return new JsonResponse(
            array(
                'node_id' => $node_id
            )
        );
    }

und in mymodule.routing.yml habe ich:

 mymodule-currentNode:
   path: '/mymodule/currentNodeId'
   defaults:
     _controller: '\Drupal\mymodule\Controller\MyModuleController::currentNodeId'
     _title: 'Current node id'
   requirements:
     _permission: 'access content'

Ich kann die aktuelle Knoten-ID aus meiner Moduldatei 'mymodule.module' abrufen, wobei ich dasselbe mache wie in der Funktion currentNodeId:

   $node_id = \Drupal::routeMatch()->getParameter('node')->Id();

Weiß jemand, ob dies eine Art Sicherheit ist oder mache ich etwas falsch? Vielen Dank

BEARBEITEN

Dies ist, was ich in meiner js-Datei habe, ich mache diesen Aufruf und ich möchte die aktuelle Knoten-ID erhalten, damit ich eine bestimmte Aufgabe ausführen kann. In der Konsole erhalte ich jedes Mal null oder undefiniert, wenn ich die Anfrage mache

$.get('/mymodule/currentNodeId/', function (data) {
                        console.log(data.node_id);
                    });
2
Henrique Alho

Ihre Route hat keinen Knotenparameter. Siehe die Dokumentation Struktur der Routen und das Beispiel von dort:

book.export:
  # This path takes dynamic arguments, which are enclosed in { }.
  path: '/book/export/{type}/{node}'
  defaults:
    # Because this route does not return HTML, use _controller.
    _controller: '\Drupal\book\Controller\BookController::bookExport'
  requirements:
    _permission: 'access printer-friendly version'
    # Ensure user has access to view the node passed in.
    _entity_access: 'node.view'

Sie können auf die Routenparameter in der Steuerung direkt in den Funktionsargumenten zugreifen:

public function bookExport($type, NodeInterface $node) {
  // get the id from the controller argument
  $node_id = $node->id();
}

\Drupal::routeMatch()->getParameter() dient zum Abrufen eines Routenparameters außerhalb der Steuerung, beispielsweise in einem Vorverarbeitungs-Hook. Damit dies funktioniert, muss der Parameter auch in der aktuellen Route definiert werden.

1
4k4

Ich habe gerade einen Blog-Artikel über eine dynamische Drupal 8 Alternative auf https://julian.pustkuchen.com/node/78 geschrieben

Hier ist mein Code für eine Hilfsfunktion:

<?php
/**
 * Helper function to return the currently loaded entity from the URL (controller).
 * Returns NULL if the currently loaded page is no entity.
 *
 * @return \Drupal\Core\Entity\EntityInterface
 */
function _get_current_controller_entity()
{
  $currentRouteParameters = \Drupal::routeMatch()->getParameters();
  foreach ($currentRouteParameters as $param) {
    if ($param instanceof \Drupal\Core\Entity\EntityInterface) {
      $entity = $param;
      return $entity;
    }
  }
  return NULL;
}
?>

Vorsichtig handhaben und testen. Wir verwenden es bisher für verschiedene Arten von Inhaltsentitäten wie Knoten, Benutzer, Commerce_Produkte usw.

1
JPustkuchen