À l'aide de ce tutoriel, la drupal gprr
commande de la console Drupal , j'ai créé une ressource REST personnalisée dans Drupal 8. Je peux utiliser cette ressource pour récupérer un simple objet JSON qui dit bonjour à l'utilisateur actuel en faisant un GET sur:
http://localhost/example/hello?_format=json
Le JSON retourné ressemble alors à ceci:
{ "hello": "tyler" }
Cela doit être prévu, car je suis connecté. Mais lorsque je me déconnecte et que je fais un autre GET sur la ressource, le même résultat est renvoyé :
{ "hello": "tyler" }
La suppression d'un cache Drupal complet résout ce problème, mais je voudrais spécifiquement désactiver la mise en cache sur cette ressource. Comment puis je faire ça?
Comme solution de contournement, j'ai pensé que l'ajout d'un horodatage à la chaîne de requête fonctionnerait:
http://localhost/example/hello?_format=json&time=123456789
Mais cela renvoie également exactement le même résultat , quelle que soit la valeur d'horodatage dans la chaîne de requête.
Par souci de concision, voici le code squelette pour la construction de la ressource 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()
));
}
}
Existe-t-il une configuration / un paramètre que je dois définir sur ce plugin pour désactiver la mise en cache des requêtes GET?
\Drupal
dans des endroits où vous pouvez injecter le service, ce qui, en fonction de votre code commenté, ressemble à ce que vous pouvez faire ici.J'ai eu le même problème.
Après avoir lu la documentation et parcouru cette page, j'ai pu fermer le cache de mon point de terminaison personnalisé. Voici un exemple de mon code de travail à l'intérieur de la fonction get () pour mon point de terminaison:
En ajoutant ceci pour référence future, j'espère que cela aidera toute personne qui en a besoin.
Page de documentation de CacheableResponseTrait
la source
drush cr
cela a fonctionné à chaque fois par la suite.J'ai également eu le même problème et la solution est:
Vous pouvez également voir les documentations CacheableMetadata et les contextes de cache .
la source