Desativando o cache via programação

Neste tutorial vou mostrar como desativar o cache de uma página específica via programação no Drupal 8.

Primeiro vamos criar o arquivo "/src/EventSubscriber/CacheDisableSubscriber.php" que irá conter a classe "CacheDisableSubscriber":

<?php

namespace Drupal\custom_disable_cache\EventSubscriber;

use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Class CacheDisableSubscriber.
 */
class CacheDisableSubscriber implements EventSubscriberInterface {
  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = ['disableCacheForPageLocked'];
    return $events;
  }

  /**
   * Subscriber Callback for the event.
   */
  public function disableCacheForPageLocked() {
    $node = \Drupal::routeMatch()->getParameter('node');

    //Faça a sua regra aqui
    if (!empty($node) && $node->id() == '3') {
      \Drupal::service('page_cache_kill_switch')->trigger();
    }
  }
}

No código acima, eu desativo o cache do node com id 3, substitua essa regra de acordo com a sua necessidade.

Agora vamos criar o serviço, informando a classe que acabamos de criar.

Na raiz do seu módulo, crie o arquivo "custom_disable_cache.services.yml":

services:
  custom_event_subscriber:
    class: Drupal\custom_disable_cache\EventSubscriber\CacheDisableSubscriber
    tags:
      - {name: event_subscriber}

Feito isso, apenas habilite o módulo e a sua regra para desativar o cache já estará funcionando. 

Baixe aqui a implementação completa do módulo.

Espero ter ajudado.
Até o próximo post!