web-dev-qa-db-ja.com

JavaScript変数をPHP Controller in Drupal 8

Bootstrap TableというJavascriptライブラリを使用するカスタムモジュールがあります。特に、このライブラリを使用すると、クリック可能な行を含むテーブルを作成できます。現在、PHP ControllerからJavascriptライブラリに変数を渡すことができます。これらの変数は、テーブルのフィールドにフィードするために使用されます。

次に行うことは、行がクリックされたときに行の値を返し、それをPHPコントローラに返すイベントを定義することです。

コントローラはこの返された変数を使用して、特定のアクションを実行し、テーブルに表示される情報を更新します。

私の知る限り、AJAXを使用する必要がありますが、これまでのところ、希望どおりの結果を得ることができませんでした。

これは私が見つけた情報の一部です。

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

JavaScript変数をPHPに戻すにはどうすればよいですか?

ajaxで使用するコントローラー関数

3
afmondragonc

そうです、このタスク用のphpコントローラーを作成する必要があります。

これにはいくつかのステップが含まれます

カスタムモジュールで、コントローラーを/ yourmodules/src/Plugin/rest/resourceに追加する必要があります

この例では、HelloRest.phpという名前を作成しました

<?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);
    }
}

次に、REST UI module here https://www.drupal.org/project/restui を使用してルートを有効にしました。おそらく別の方法がありますルートを有効にしますが、方法はわかりません。また、必要なすべてのロールに残りの通話にアクセスする権限があることを確認したいと思います。私の場合、サイトにアクセスしたすべての人にアクセスを許可したいので、匿名であることを確認する必要がありましたユーザーはそのルートにアクセスできました。

これで作成が完了したので、それに対してajax呼び出しを実行して応答を返すだけです。

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