为升级到 Drupal 9做好准备

Drupal 9将于2020年6月3日发布,因此我想就此发表一篇关于如何检查您的网站是否准备就绪的帖子。

从Drupal 7到Drupal 8的过渡更多的是动荡而不是升级。将Drupal 7站点更新到Drupal 8需要很多工作,包括代码更改和迁移步骤。Drupal 7模块与Drupal 8不兼容,因此编写的任何自定义代码都需要适应新的结构。这种变化的困难使Drupal社区注意到并思考如何引入Drupal的未来版本。

在Drupal 8的生命周期中,已向系统中添加了功能,并对基础进行了一些更改以改进系统的体系结构。在此过程中,不破坏向后兼容性非常重要,这样Drupal 8的模块将继续与最新版本一起使用。将代码标记为要删除后,将其标记为已弃用,并留在Drupal 8代码库中。

Drupal 8是基于Symfony组件版本3构建的,这些组件将在2021年11月不受支持。在不破坏向后兼容性的情况下就不可能更新Symfony组件,因此这需要在Drupal 9中完成。 Drupal内的第三方依赖关系,包括JQuery依赖关系,这些依赖关系不能无故升级。

Drupal 9一直存在,并且随着Drupal 8生命周期的发展而被考虑。社区的目标是使向Drupal 9的过渡尽可能地轻松。因此,迁移到Drupal 9的计划将是删除已弃用的代码,在标记Drupal 9.0.0版本之前更新Symfony组件和第三方库。从本质上讲,Drupal 8的最新版本(8.8.0)与Drupal 9非常接近,因此向Drupal 9的过渡不需要太多的工作。

在发布之前,社区为准备Drupal 9的贡献模块空间做了很多工作。这导致了诸如自动创建问题以标记Drupal 9不兼容,自动代码修复等简单举措。可以轻松地以自动化方式解决问题,并通过社区驱动的事件来更新Drupal模块。这意味着这次升级到Drupal 9并等待贡献的空间赶上来的问题不会那么普遍。

工具

在贡献空间准备就绪的同时,您应该开始查看您的站点,以确保您自己的代码库可用于Drupal9。以下工具将帮助您发现站点中的任何问题,以便您可以进行纠正。

你的 IDE

在您的站点上进行开发时,您应该具有一个能够显示不赞成使用的代码的IDE。正如我上面提到的,Drupal 8代码库现在包含了一组不推荐使用的代码,在这种情况下,您的IDE在查看代码时应该大喊大叫。

作为示例,我在一个正在使用的最近项目中发现了以下不推荐使用的代码。我在这里使用的编辑器是PHPStorm,它用删除线标记不推荐使用的内容。

之后,我参加了清楚标明所有弃用规定的课程。

<?php

 

namespace Drupal\Core\Entity;

 

use Drupal\Core\Field\FieldDefinitionListenerInterface;

use Drupal\Core\Field\FieldStorageDefinitionListenerInterface;

 

/**

 * Provides an interface for entity type managers.

 *

 * @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0.

 *

 * @see https://www.drupal.org/node/2549139

 */

interface EntityManagerInterface extends EntityTypeListenerInterface, EntityBundleListenerInterface, FieldStorageDefinitionListenerInterface, FieldDefinitionListenerInterface, EntityTypeManagerInterface, EntityTypeRepositoryInterface, EntityTypeBundleInfoInterface, EntityDisplayRepositoryInterface, EntityFieldManagerInterface, EntityRepositoryInterface {

 

  /**

   * @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Use

   *   \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface::getLastInstalledDefinition()

   *   instead.

   *

   * @see https://www.drupal.org/node/2549139

   */

  public function getLastInstalledDefinition($entity_type_id);

 

  /**

   * @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Use

   *   \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface::getLastInstalledFieldStorageDefinitions()

   *   instead.

   *

   * @see https://www.drupal.org/node/2549139

   */

  public function getLastInstalledFieldStorageDefinitions($entity_type_id);

 

}

为了解决这个问题,我将需要做一些重构,但是在很大程度上将包括替换传递给该类的对象的类型。

不推荐使用的代码的一个很好的例子是旧drupal_set_message()函数,它在Drupal 8.5.0中被Messenger服务取代。查看此功能上方的文档,可以了解使用的功能。

/**

 * @deprecated in drupal:8.5.0 and is removed from drupal:9.0.0.

 *   Use \Drupal\Core\Messenger\MessengerInterface::addMessage() instead.

*/

function drupal_set_message($message = NULL, $type = 'status', $repeat = FALSE) {

Drupal检查

Drupal检查工具是由Matt Glaman创建的,它是一种扫描代码以查找过时并生成报告的方式。最好通过composer作为项目的一部分或全局安装该工具。

composer require mglaman/drupal-check --dev

它不依赖于引导Drupal,因此可以在您要检查的项目之外使用。安装完成后,您只需调用即可运行该工具,通常使用您要分析的目录的参数即可。

./vendor/bin/drupal-check docroot/modules/custom

我在发现之前弃用该站点的同一站点上运行了此报告,这为我带来了一份报告。

$ ./vendor/bin/drupal-check docroot/modules/custom

 37/37 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%

 

 ------ ----------------------------------------------------------------------------------------------------------------------------------------------

  Line   my_module/src/Plugin/Field/FieldFormatter/ExampleCommentFormatter.php

 ------ ----------------------------------------------------------------------------------------------------------------------------------------------

  90     Parameter $entity_manager of method Drupal\my_module\Plugin\Field\FieldFormatter\ExampleCommentFormatter::__construct() has

         typehint with deprecated interface Drupal\Core\Entity\EntityManagerInterface:

         in drupal:8.0.0 and is removed from drupal:9.0.0.

 ------ ----------------------------------------------------------------------------------------------------------------------------------------------

 

 

 [ERROR] Found 1 error

在git repo上有很多关于drupal-check工具的文档,因此请检查是否要安装和运行它。

升级状态

升级状态是将Drupal检查工具包装在Drupal站点内易于使用的模块中的模块。安装模块并转到路径/ admin / reports / upgrade-status后,您应该会看到此模块的主屏幕。在这里,您可以在每个模块上运行报告,并查看是否有需要解决的不推荐使用的模块。

以下是我正在研究的示例项目的简单检查。

我包括了上面的屏幕快照,因为它表明需要做一些工作,尽管我只是通过更新模块来纠正了上述大多数问题。

在更新之外,我一直在研究几个贡献的项目,以使它们与Drupal 9保持同步。大多数更改并不是太难,大部分都涉及在信息文件中添加正确的字符串或进行硬交换。编码的依赖关系与替代服务。

参与其中!

尽管许多Drupal模块已经为Drupal 9做好了准备,但是仍然有很多工作要做,因此,如果您希望以结构化的方式参与进来,那么您会很高兴地知道,这个周末会有Drupal 9移植周末。上一次为Drupal 9准备了89个不同的模块,因此,如果您希望提供所需的模块帮助,请参与其中。整天会有社区志愿者为您提供有关Drupal 9准备问题的帮助。

以上是 为升级到 Drupal 9做好准备 的全部内容, 来源链接: utcz.com/z/356878.html

回到顶部