为升级到 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/custom37/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