이 튜토리얼 Drupal Console의 drupal gprr명령을 사용하여 Drupal 8에서 사용자 정의 REST 자원을 작성했습니다.이 자원을 사용하여 GET을 수행하여 현재 사용자에게 인사하는 간단한 JSON 오브젝트를 검색 할 수 있습니다.
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주석 처리 된 코드를 기반으로 서비스를 주입 할 수있는 장소에서 사용 하지 않는 것이 좋습니다.