Drupal 8 模块开发

Drupal 8 模块开发 11.5 : PhpStorm 策略 蒲公英 周四, 08/17/2017 - 18:57

原文地址:
https://docs.acquia.com/articles/drupal-8-phpstorm-strategies  


PhpStorm 提供了帮助使用依赖注入的工具。  

扩展结构视图

Drupal 8 里,组件功能经常跨多个文件。一个类经常扩展另一个类,或实现一些接口。结构视图可以浏览类的方法和属性,但默认情况下,看不到从其他类继承的方法。有一个按钮可以激活这个功能。  

Drupal 8 模块开发 11.4 : 依赖注入和插件 蒲公英 周四, 08/17/2017 - 18:54

原文地址:
https://docs.acquia.com/articles/drupal-8-dependency-injection-and-plugins  
 

插件

插件是添加依赖注入最复杂的组件。很多插件不需要依赖注入,有时找例子来拷贝都具有挑战性。多数插件继承了使用接口的类。例如 Blocks,继承了 BlockBase,BlockBase 实现了 BlockPluginInterface 。  

依赖注入应该添加在个别插件级,而不是基类级别。这意味着我们能够向任何插件添加依赖注入,创建新插件时,也不总是需要使用依赖注入。  

Drupal 8 模块开发 11.3 : 依赖注入和控制器 蒲公英 周四, 08/17/2017 - 18:49

原文地址:
https://docs.acquia.com/articles/drupal-8-dependency-injection-and-controllers  

控制器

控制器使用依赖注入比较容易,因为他们提供返回服务容器的 create() 方法。我们已经创建了路由,现在创建下控制器文件:

src/Controller/DIController.php

下载文件

Drupal 8 模块开发 11.2 : 依赖注入和服务 蒲公英 周四, 08/17/2017 - 17:47

原文地址:
https://docs.acquia.com/articles/drupal-8-dependency-injection-and-services  
 

注入服务

上文定义服务时映射了服务名和服务类,这个服务也是完全独立的。如果我们想创建一个使用其他服务的服务,那么必须注入这些依赖(在 services.yml 文件里定义这些依赖)。我们更新下之前定义的 di_example.services.yml 文件,创建一个使用 current_user 和 di_example.mood_ring 服务 的 di_example.talk 服务。

Drupal 8 模块开发 11.1 : 依赖注入回顾 蒲公英 周四, 08/17/2017 - 17:43

原文地址:
https://docs.acquia.com/articles/drupal-8-review-dependency-injection  


在之前的课程里,我们介绍了 服务(services),控制器(controllers)和插件(plugins)几种模式。在这些模式里我们演示了怎样使用依赖注入。在本回顾里,我们提供一些简单的例子,讨论下怎样使用 PhpStorm 帮助我们使用这些模式。  

安装基础例子模块

我们将创建包含两个服务,一个控制器和一个区块插件的 di_example 模块。我们首先创建不涉及依赖注入的基础部分: .info.yml 和 .routing.yml 文件,以及一个服务。这个服务不依赖其他的服务。  

Drupal 8 模块开发 10.4 : PHPUnit Doubles / Mocks / Stubs 蒲公英 周四, 08/17/2017 - 17:40

原文地址:
https://docs.acquia.com/articles/drupal-8-phpunit-doubles-mocks-stubs  
 

我们写单元测试的目的是要测试个别组件,例如一个服务。
通常,服务需要系统其他部分的功能。这种情况下,需要制造依赖的一个模拟(Mock)版本,以便于我们把焦点放在测试服务本身。  

创建一个模拟

当你创建一个模拟时,其实你正在创建那个类的一个副本,只是它的所有方法被替换返回 NULL。

Drupal 8 模块开发 10.3 : 功能测试 蒲公英 周四, 08/17/2017 - 17:34

原文地址:
https://docs.acquia.com/articles/drupal-8-functional-tests  
 

Drupal 8 中的功能测试需要你有一个正在运行的站点,并且安装了 SimpleTest(核心内) 模块。该测试中我们会向用户(user)实体追加一个字段,之后检查用户是否存在这个字段。我们需要使用功能测试,因为我们需要引导 Drupal 获得用户对象。当然通过单元测试检查这个也可以,但我们最终处理的是很复杂的一个系统。  

PHPUnit 和 SimpleTest 功能测试(BrowserTestBase / WebTestBase)

标准和未来的默认功能测试系统是使用 PHPUnit 和基类 BrowserTestBase 。很多核心使用老的功能测试系统 SimpleTest 以及 WebTestBase 。基于 PHPUnit 的测试能从 IDE 运行。SimpleTest 测试运行稍复杂一些,我们将在后边覆盖到。  

Drupal 8 模块开发 10.2 : 单元测试 蒲公英 周四, 08/17/2017 - 17:27

原文地址:
https://docs.acquia.com/articles/drupal-8-unit-testing  


Drupal 附带了一个 PHPUnit,但你需要确保它配置正确。我们假设你正使用 PhoStorm,但你也可以从命令行运行这些测试。  

何时你应该创建单元测试?

服务最有意义做单元测试,因为它们被设计为独立存在。围绕测什么有很多争论。首先测试你的所有服务方法,之后根据需要添加测试,这样进行测试可能比较有用。  

在 PhpStorm 内配置 PHPUnit

配置项目:

Drupal 8 模块开发 10.1 : 单元和功能测试 蒲公英 周四, 08/17/2017 - 17:25

原文地址:
https://docs.acquia.com/article/lesson-101-unit-and-functional-testing  
 

Drupal 8 中的测试主要分为两种类型:单元测试和功能测试。测试被用于多种途径,有些测试在开发开始之前书写,帮助开发者构建所需要的功能,另一些测试帮助进行回归测试。本课目的是介绍这两种类型的测试,但不解释何时写这些测试。  

单元测试和功能测试的主要区别是测试的范围,单元测试旨在测试少量的功能。Drupal 8 中,自定义服务比较适合使用单元测试,这是因为服务被设计为与使用这个服务的功能解耦,这些服务不依赖于正在运行的 Drupal 站点或者现场运行的配置和数据。  

功能测试是测试整合了很多组件的功能。例如,我们可能希望在系统中执行一个变更,然后确保另一个系统响应这种变化。要完成这个你需要一个实际的 Drupal 站点。你可以做更大范围的功能测试,但它们通常较慢。  

Drupal 8 模块开发 9.6 : 实验室 蒲公英 周四, 08/17/2017 - 17:22

原文地址:
https://docs.acquia.com/articles/drupal-8-theme-lab  
 

总结

Drupal 这些年改了很多,在很多情况下它支持新旧系统。虽然 Drupal 8 主题部分改进了很多,但并没有像其他部分那样改的很彻底。所以同时关注新的和一贯的方式很重要,不要只关注新的替代方案。