使用して、このチュートリアルのDrupalコンソールのdrupal gprr
コマンドを、私は私が上でGETを実行して、現在のユーザーに挨拶を言うシンプルなJSONオブジェクトを取得するには、このリソースを使用することができるよDrupalの8のカスタムRESTリソースを作成しました:
http://localhost/example/hello?_format=json
返されるJSONは次のようになります。
{ "hello": "tyler" }
私はログインしているので、これは予想されることです。しかし、ログアウトして、リソースに対して別のGETを実行すると、同じ結果が返されます。
{ "hello": "tyler" }
完全なDrupalキャッシュクリアを実行すると、この問題は修正されますが、このリソースのキャッシュを特に無効にしたいと思います。どうやってやるの?
回避策として、クエリ文字列にタイムスタンプを追加するとうまくいくと思いました。
http://localhost/example/hello?_format=json&time=123456789
ただし、クエリ文字列のタイムスタンプ値に関係なく、まったく同じ結果が返されます。
簡潔にするために、GETリソースを構築するためのスケルトンコードを次に示します。
class ExampleHello extends ResourceBase {
/**
* {@inheritdoc}
*/
public static function create(/* ... */) {
return new static(/* ... */);
}
/**
* Constructs a Drupal\rest\Plugin\ResourceBase object.
*/
public function __construct(/* ... */) {
parent::__construct(/* ... */);
// ...
}
/*
* Responds to GET requests.
*/
public function get() {
$account = \Drupal::currentUser()->getAccount();
if (!$account->id()) {
return new ResourceResponse(array(
'welcome' => 'visitor'
));
}
return new ResourceResponse(array(
'hello' => $account->getAccountName()
));
}
}
GETリクエストのキャッシュを無効にするためにこのプラグインで設定する必要がある構成/設定はありますか?
\Drupal
、コメント化されたコードに基づいて、ここで実行できるように見える、サービスを注入できる場所での使用は避けてください。