it-swarm.com.de

Wie kann ich JavaScript-Variablen an PHP Controller in Drupal 8) zurückgeben?

Ich habe ein benutzerdefiniertes Modul, das eine Javascript-Bibliothek namens Bootstrap Table verwendet. Mit dieser Bibliothek kann ich unter anderem Tabellen mit anklickbaren Zeilen erstellen. Derzeit kann ich Variablen vom PHP Controller an die Javascript-Bibliothek übergeben. Diese Variablen werden verwendet, um die Felder in der Tabelle zu füttern.

Als Nächstes möchte ich ein Ereignis definieren (wenn auf eine Zeile geklickt wird), das dann den Wert der Zeile zurückgibt und an den PHP Controller zurückgibt.

Der Controller würde diese zurückgegebene Variable verwenden, um eine bestimmte Aktion auszuführen und die in der Tabelle angezeigten Informationen zu aktualisieren.

Soweit ich weiß, sollte ich AJAX verwenden, aber bisher konnte ich nicht erreichen, was ich will.

Dies sind einige der Informationen, die ich gefunden habe.

https://www.drupal.org/node/2833416

Wie gebe ich JavaScript-Variablen an PHP zurück?

Controller-Funktion mit Ajax verwenden

3
afmondragonc

Sie haben Recht, Sie müssen einen PHP-Controller für diese Aufgabe erstellen.

Dies umfasst eine Reihe von Schritten

In Ihrem benutzerdefinierten Modul müssen Sie Ihren Controller in/yourmodules/src/Plugin/rest/resource hinzufügen

In diesem Beispiel habe ich eine mit dem Namen HelloRest.php erstellt

<?php

namespace Drupal\my_module\Plugin\rest\resource;

use Drupal\Driver\Exception\Exception;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ResourceResponse;
/**
 * Provides a resource for accepting rest calls
 *
 * @RestResource(
 *   id = "hello_rest",
 *   label = @Translation("Hello Rest Handler"),
 *   uri_paths = {
 *     "canonical" = "/hello/{name}",
 *     "https://www.drupal.org/link-relations/create" = "/hello"
 *   }
 * )
 */

class HelloRest extends ResourceBase {
    /**
     * Responds to GET requests.
     *
     * Returns a watchdog log entry for the specified ID.
     *
     * @param int $id
     *   The ID of the watchdog log entry.
     *
     * @return \Drupal\rest\ResourceResponse
     *   The response.
     */

    public function get($name = '') {
        $response = ['message' => 'Hello '.$name];
        return new ResourceResponse($response);
    }
}

Dann habe ich die Route mit dem UI-Modul REST hier https://www.drupal.org/project/restui aktiviert, um dies zu tun. Es gibt wahrscheinlich einen anderen Weg dazu Aktivieren Sie die Route, aber ich bin mir nicht sicher, wie. Außerdem möchten Sie sicherstellen, dass jede Rolle, die Sie benötigen, über Berechtigungen für den Zugriff auf den Restanruf verfügt. In meinem Fall wollte ich, dass jeder, der die Site besucht, Zugriff hat, daher musste ich sicherstellen, dass diese anonym ist Benutzer hatten Zugriff auf diese Route.

Nachdem Sie das erstellt haben, müssen Sie nur noch einen Ajax-Aufruf ausführen, um Ihre Antwort zurückzubekommen.

jQuery.ajax({url: location.protocol + "//" + location.Host + "/hello/"+name+ '?_format=json", success: function(result){
        console.log(result.message);
}}
1
Matt