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?
\Drupalw miejscach, w których możesz wstrzyknąć usługę, która wygląda na to, że na podstawie skomentowanego kodu możesz to zrobić.