Korzystając z tego samouczka polecenia Drupal Console drupal gprr
, utworzyłem niestandardowy zasób REST w Drupal 8. Jestem w stanie użyć tego zasobu, aby pobrać prosty obiekt JSON, który przywitał się z bieżącym użytkownikiem, wykonując GET na:
http://localhost/example/hello?_format=json
Zwrócony JSON wygląda następująco:
{ "hello": "tyler" }
Tego należy się spodziewać, ponieważ jestem zalogowany. Ale kiedy się wyloguję i ponownie wykonam GET na zasobie, ten sam wynik zostanie zwrócony :
{ "hello": "tyler" }
Wykonanie pełnego wyczyszczenia pamięci podręcznej Drupala rozwiązuje ten problem, ale chciałbym specjalnie wyłączyć buforowanie tego zasobu. Jak mogę to zrobić?
Jako obejście, pomyślałem, że dodanie znacznika czasu do ciągu zapytania zadziała:
http://localhost/example/hello?_format=json&time=123456789
Ale to również zwraca dokładnie ten sam wynik , bez względu na wartość znacznika czasu w ciągu zapytania.
Dla zwięzłości, oto szkielet kodu do budowy zasobu 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()
));
}
}
Czy w tej wtyczce muszę ustawić konfigurację / ustawienie, aby wyłączyć buforowanie żądań GET?
\Drupal
w miejscach, w których możesz wstrzyknąć usługę, która wygląda na to, że na podstawie skomentowanego kodu możesz to zrobić.Miałem ten sam problem.
Po przeczytaniu dokumentacji i przejrzeniu tej strony udało mi się wyłączyć pamięć podręczną dla mojego niestandardowego punktu końcowego. Oto przykład mojego działającego kodu wewnątrz funkcji get () dla mojego punktu końcowego:
Dodając to do wykorzystania w przyszłości, mam nadzieję, że pomoże to każdemu, kto tego potrzebuje.
Strona dokumentacji CacheableResponseTrait
źródło
drush cr
działało za każdym razem.Miałem również ten sam problem i rozwiązaniem tego jest:
Możesz także zobaczyć CacheableMetadata i dokumentację kontekstów pamięci podręcznej .
źródło