페이지로드에 대한 작업을 수행하기 위해 KernelEvents :: REQUEST 이벤트 구독자를 구현하려고합니다.
요청한 페이지가 Drupal 캐시에 있는지 여부에 관계없이이 이벤트가 발생해야합니다. Drupal이 캐시에서 무언가를 제공 할 때 KernelEvents :: REQUEST가 실행되지 않는 것 같습니다.
이를 달성하기 위해 사용할 수있는 이벤트가 있습니까, 아니면 어떤 형태의 미들웨어로 요구 사항을 구현해야합니까?
페이지로드에 대한 작업을 수행하기 위해 KernelEvents :: REQUEST 이벤트 구독자를 구현하려고합니다.
요청한 페이지가 Drupal 캐시에 있는지 여부에 관계없이이 이벤트가 발생해야합니다. Drupal이 캐시에서 무언가를 제공 할 때 KernelEvents :: REQUEST가 실행되지 않는 것 같습니다.
이를 달성하기 위해 사용할 수있는 이벤트가 있습니까, 아니면 어떤 형태의 미들웨어로 요구 사항을 구현해야합니까?
답변:
동적 캐시는 우선 순위가 27 인 이벤트를 구독합니다. 코드를 실행하기 전에 우선 순위> 27을 사용해야합니다.
public static function getSubscribedEvents() {
$events = [];
// Run after AuthenticationSubscriber (necessary for the 'user' cache
// context; priority 300) and MaintenanceModeSubscriber (Dynamic Page Cache
// should not be polluted by maintenance mode-specific behavior; priority
// 30), but before ContentControllerSubscriber (updates _controller, but
// that is a no-op when Dynamic Page Cache runs; priority 25).
$events[KernelEvents::REQUEST][] = ['onRequest', 27];
['checkForRediret', 30];
를 추가하면 예상대로 작동했습니다.
Drupal 8에는 페이지 캐시와 동적 페이지 캐시의 두 가지 레벨 캐시가 있습니다.
예, @ 4k4에서 언급 한 것처럼 동적 페이지 캐시를 가로 챌 수 있습니다. 발생한 문제가 페이지 캐시를 가로 챌 가능성이 높습니다. 열쇠는 여기 에 있습니다 .
이에 대한 몇 가지 해결책이 있습니다.
'HttpKernelInterface'를 구현하는 새 클래스를 추가하고 우선 순위가 200보다 높은 'http_middleware'를 등록하십시오 (280). 'PageCache'클래스 및 참조 구현을 참조하십시오.
'ServiceProviderBase'에서 확장하여 기존 'PageCache'를 변경할 새 클래스를 작성하십시오. 여기 를 참조 하십시오 . 그런 다음 'PageCache'를 확장 할 새 클래스를 작성하십시오.
다음은 코드 참조입니다.
이것은 StaticCacheServiceProvider.php입니다.
/**
* Modifies the language manager service.
*/
class StaticCacheServiceProvider extends ServiceProviderBase
{
/**
* {@inheritdoc}
*/
public function alter(ContainerBuilder $container)
{
// Overrides language_manager class to test domain language negotiation.
$definition = $container->getDefinition('http_middleware.page_cache');
$definition->setClass('Drupal\your_module\StackMiddleware\StaticCache');
}
}
이것은 StaticCache.php입니다.
/**
* Executes the page caching before the main kernel takes over the request.
*/
class StaticCache extends PageCache
{
/**
* {@inheritdoc}
*/
public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true)
{
// do special logic here.
$response = parent::handle($request, $type, $catch);
return $response;
}
}
희망이 도움이됩니다.