Revalidator
了解如何实现自定义 revalidator 插件。
为了处理 按需重新验证,我们使用 Revalidator
插件。
一个 Revalidator
插件会在 Drupal 实体被 **插入**、**更新** 或 **删除** 时重新验证一个或多个 Next.js 站点。
默认情况下,next
模块附带 Path
重验证器。 Path
重验证器根据实体路径重新验证 Next.js 站点。
自定义重验证器
您可以使用 Drupal 插件 API 实现自己的重验证器插件。
custom_module/src/Plugin/Next/Revalidator/CustomRevalidator.php
<?php
namespace Drupal\custom_module\Plugin\Next\Revalidator;
use Drupal\next\Event\EntityActionEvent;use Drupal\next\Plugin\RevalidatorBase;
/** * Provides a custom revalidator. * * @Revalidator( * id = "custom", * label = "Custom Revalidator", * description = "Description for the custom revalidator" * ) */class CustomRevalidator extends RevalidatorBase {
/** * {@inheritdoc} */ public function revalidate(EntityActionEvent $event): bool { // Get the entity. $entity = $event->getEntity();
// Get the sites configured for this entity. $sites = $event->getSites();
// Get the action: insert, updated or delete. $action = $event->getAction(); }
}
访问实体类型的配置页面,网址为 /admin/config/services/next/entity-types
。
您应该看到在按需重验证下有一个名为 **Custom Revalidator** 的插件。 选择它并保存。
现在,每当插入、更新或删除实体时,都会调用 CustomRevalidator::revalidate
函数。
**注意:** revalidate
在 关闭 时调用。 这意味着 dump()
调用不会被注册。 请改为使用断点。
可配置重验证器
要实现可配置的 Revalidator
插件,请扩展 ConfigurableRevalidatorBase
。
custom_module/src/Plugin/Next/Revalidator/ConfigurableRevalidator.php
<?php
namespace Drupal\custom_module\Plugin\Next\Revalidator;
use Drupal\Core\Form\FormStateInterface;use Drupal\next\Event\EntityActionEvent;use Drupal\next\Plugin\ConfigurableRevalidatorBase;
/** * Provides a configuratble revalidator. * * @Revalidator( * id = "configurable_revalidator", * label = "Configurable Revalidator", * description = "Description for the configurable revalidator" * ) */class ConfigurableRevalidator extends ConfigurableRevalidatorBase {
/** * {@inheritdoc} */ public function defaultConfiguration() { return [ 'message' => NULL, ]; }
/** * {@inheritdoc} */ public function buildConfigurationForm(array $form, FormStateInterface $form_state) { $form['message'] = [ '#type' => 'textfield', '#title' => $this->t('Message'), '#default_value' => $this->configuration['message'], ];
return $form; }
/** * {@inheritdoc} */ public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { $this->configuration['message'] = $form_state->getValue('message'); }
/** * {@inheritdoc} */ public function revalidate(EntityActionEvent $event): bool { // Get the configuration. $message = $this->configuration['message']; }
}
您还应该在 web/modules/custom/custom_module/config/custom_module.schema.yml
提供架构定义。
next.revalidator.configuration.configurable_revalidator: type: mapping mapping: message: type: string label: "Message"