Next-Drupal 1.6

2022年12月6日 - @shadcn


今天的版本是一个重大的版本。我们宣布支持 **Next.js 13** 和 **Drupal 10**。

我们还重写了按需重新验证的实现。Drupal 模块现在附带了基于 Drupal 事件 API 和插件系统的 **稳定的按需重新验证** 功能。

我们每周的下载量接近 **3000+**。感谢大家。🎉


Next.js 13

我们已将 next-drupal 和(JSON:API 和 GraphQL)启动器更新到 Next.js 13。

您现在可以安全地更新您的网站,并开始实施新的 Next.js 13 功能,例如新的 <Image /><Link /> 组件,添加 @next/font...等等。

yarn add next-drupal@latest

Drupal 10

next 模块已更新到 Drupal 10。我们已删除所有弃用的代码和 API。

注意:这也意味着,从 1.6.0 版本开始,我们将停止支持 Drupal 8。您可以将您的网站升级到 Drupal 9.3+ 或 Drupal 10(发布后)。


按需重新验证

按需重新验证的实现已在 1.6.0 版本中完全重写,现在已稳定。

按需重新验证现在建立在 Drupal 的事件 API 和 Revalidator 插件之上。

您可以提供自己的 Revalidator 插件,以便在插入、更新或删除实体时执行自定义代码。

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 {
    // Called when entity is created, updated or deleted.
  }
 
}

请参阅 Revalidator 插件文档

实体事件

我们还添加了实体事件,以便您可以为插入、更新或更新实体时构建自己的事件订阅者。

您还可以使用事件订阅者在 **重新验证后** 执行代码。

custom_module/src/EventSubscriber/EventSubscriber.php
<?php
 
namespace Drupal\next_tests\EventSubscriber;
 
use Drupal\next\Event\EntityEvents;
use Drupal\next\Event\EntityRevalidatedEventInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
/**
 * Defines an event subscriber for entity revalidated events.
 */
class EventSubscriber implements EventSubscriberInterface {
 
  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    $events[EntityEvents::ENTITY_REVALIDATED] = ['onRevalidated'];
    return $events;
  }
 
  /**
   * Responds to entity revalidated.
   *
   * @param \Drupal\next\Event\EntityRevalidatedEventInterface $event
   *   The event.
   */
  public function onRevalidated(EntityRevalidatedEventInterface $event) {
    if ($event->isRevalidated()) {
     // Do something if entity has been successfully revalidated.
    }
  }
 
}

版本匹配

1.6.0 版本开始,我们将对 next-drupalnext 模块进行次要版本匹配。

提升 next-drupal 的次要版本将提升 next 模块的相同版本。

注意:为了匹配 next-drupal 1.6.0 的次要版本,我们将跳过 next 1.5.0


升级

您可以按照我们的升级指南 此处 升级到 1.6.0