Я пытаюсь создать динамическое локальное действие через производную. Производная работает и возвращает ссылку, сгенерированную динамически, но кеш, похоже, сохраняет свое значение.
Согласно этому Журнал изменений ядра Drupal, я понял, что могу установить параметры кеша для производной, что я пытался, но пока тщетно - я еще не очень хорошо знаком с этими концепциями, поэтому ценю любые рекомендации о том, как предотвратить $гид
от кэширования.
Вот мое локальное действие ведет.ссылки.action.yml
:
ведет.new_deal:
производный: 'Drupal\leads\Plugin\Derivative\DynamicLocalTasks'
Вот моя производная:
<?php
пространство имен Drupal\leads\Plugin\Derivative;
используйте Drupal\Component\Plugin\Derivative\DeriverBase;
используйте Drupal\Core\Cache\CacheableDependencyInterface;
используйте Drupal\Core\Cache\CacheableDependencyTrait;
/**
* Определяет динамические локальные задачи.
*/
класс DynamicLocalTasks расширяет DeriverBase {
использовать CacheableDependencyTrait;
/**
* {@inheritdoc}
*/
публичная функция getDerivativeDefinitions($base_plugin_definition) {
$groupLead = getGroupsUserIsLead();
если (isset($groupLead[0])){
$gid = $groupLead[0];
}
еще{
return \Drupal\Core\Access\AccessResult::forbidden();
}
// Реализовать динамическую логику для предоставления значений для тех же ключей, что и в example.links.task.yml.
$this->derivatives['leads.new_deal'] = $base_plugin_definition;
$this->derivatives['leads.new_deal']['title'] = "Новый курс";
$this->derivatives['leads.new_deal']['route_name'] = 'entity.group_content.create_form';
$this->derivatives['leads.new_deal']['appears_on'] = ['leads.deals'];
$this->derivatives['leads.new_deal']['route_parameters'] = ['plugin_id' => 'group_node:deals','group' => $gid];
$this->cacheMaxAge = 0;
$this->getCacheMaxAge();
вернуть parent::getDerivativeDefinitions($base_plugin_definition);
}
общедоступная функция getCacheMaxAge() {
вернуть 0;
}
}