Используя эту учебнуюdrupal gprr
команду Drupal Console , я создал собственный ресурс REST в Drupal 8. Я могу использовать этот ресурс для извлечения простого объекта JSON, который говорит привет текущему пользователю, выполнив GET для:
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
в местах, где вы можете внедрить сервис, который на основе вашего закомментированного кода выглядит так, как вы можете сделать здесь.Я была такая же проблема.
Прочитав документацию и просмотрев эту страницу, я смог отключить кэш для своей пользовательской конечной точки. Вот пример моего рабочего кода внутри функции get () для моей конечной точки:
Добавляя это для дальнейшего использования, надеюсь, это поможет всем, кому это нужно.
Страница документации CacheableResponseTrait
источник
drush cr
работало каждый раз потом.У меня также была та же проблема, и решение для этого:
Вы также можете увидеть документацию CacheableMetadata и контекстов кэша .
источник