Bu öğretici Drupal Konsolu'nun drupal gprr
komutunu kullanarak , Drupal 8'de özel bir REST kaynağı oluşturdum. Bu kaynağı, bir GET yaparak geçerli kullanıcıya merhaba diyen basit bir JSON nesnesi almak için kullanabiliyorum:
http://localhost/example/hello?_format=json
Geri dönen JSON şöyle görünür:
{ "hello": "tyler" }
Bu, beklediğim gibi giriş yaptım. Ama ben çıkış ve kaynak başka bir GET yaptığımda, aynı sonuç döndürülür :
{ "hello": "tyler" }
Tam bir Drupal önbellek temizlemesi yapmak bu sorunu giderir, ancak bu kaynakta önbelleğe almayı özellikle devre dışı bırakmak istiyorum. Bunu nasıl yapabilirim?
Geçici bir çözüm olarak, sorgu dizesine bir zaman damgası eklemek işe yarayacağını düşündüm:
http://localhost/example/hello?_format=json&time=123456789
Ancak sorgu dizesinde hangi zaman damgası değeri olursa olsun, aynı sonucu döndürür .
Kısacası, GET kaynağını oluşturmak için iskelet kodu şöyledir:
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 isteklerinde önbelleğe almayı devre dışı bırakmak için bu eklentide ayarlamam gereken bir yapılandırma / ayar var mı?
\Drupal
kodunuza dayanarak burada yapabileceğiniz gibi görünen hizmeti enjekte edebileceğiniz yerlerde de kullanmaktan kaçınmalısınız .