入门指南 - 参考信息(Drupal 8)
Drupal 8 使用了许多 PHP 的高级功能和复杂的第三方库,为开发者提供了所有 CMS 中最先进的 API。虽然有经验的 Drupal 7 开发者会注意到一些重大变化,但大部分基础结构仍然熟悉。
如果在学习本模块开发者分步指南(D8)时,有些内容对你来说是新的,那么以下资料可能会有所帮助。不过,进入 D8 模块部分 并不需要完全掌握所有知识。
面向对象编程(OOP)
虽然最初看起来令人望而生畏,但 OOP 已被证明是最佳实践。
要了解 PHP 的最佳实践,请阅读 phptherightway.com。Drupal 并未使用其中所有记录的工具和方法,但该网站是学习 PHP 语言功能的绝佳入门。
通过阅读 PHP 官方关于类与对象的文档以及以下优秀教程,更新你的 OOP 知识:
- PHP 面向对象编程全解析
- 面向对象编程(维基百科)
- PHP 面向对象入门教程(tuts+)
- 面向对象概念(tutorialspoint.com)
- PHP 面向对象编程(phpro.org)
- PHP 面向对象编程课程(YouTube)
- 编程基础:面向对象设计(lynda.com)
- 必须掌握的 12 个 PHP OOP 概念
- SymfonyCasts 上的 OOP 教程(前称 KNP University)
Drupal 8 还使用了许多常见的设计模式,建议你了解以下概念:
工厂模式 与 延迟静态绑定
软件设计模式(维基百科)
编程基础:设计模式(lynda.com)
PHP 命名空间
如果你还不熟悉 PHP 命名空间的概念,请阅读以下资料:
- PHP 命名空间入门
- PHP 官方命名空间文档
- 两分钟了解 PHP 命名空间
- PHP 命名空间详解(Dayle Rees)
- PHP 命名空间教程(tuts+)
在大多数情况下,Drupal 代码的命名空间基于所属模块。
示例:block.module 的命名空间:
namespace Drupal\block;
了解更多 Drupal 命名空间标准,以及 Drupal 中的 PSR-4 使用方法。如果你的 IDE 支持 PHP 命名空间,它应能识别并提供自动补全功能。
依赖注入(Dependency Injection)
虽然依赖注入本质上是 OOP 的一种设计模式,但 Drupal 8 广泛使用了这一概念。理解它对访问和使用核心 API 至关重要。
阅读 PHP 中的依赖注入,以及页面上推荐的其他相关文章。特别推荐阅读 这篇文章,因为 Drupal 广泛使用了 Symfony 的服务容器。
另请参阅:
Symfony
Symfony 是一个 PHP 框架,Drupal 采用它以减少代码重复。Drupal 8 使用 Symfony 2(后迁移至 Symfony 3)的大量代码来处理路由、会话和服务容器等功能。要了解为什么做出这一选择,请查看主提交者 alexpott 的演讲。
阅读 Symfony 2 官方文档 来加深理解。虽然不必掌握全部内容,但了解 Symfony 的工作原理能让你成为更优秀的 Drupal 和 PHP 开发者。还可以查看 Symfony 术语表。
查看 core/composer.lock 文件以了解 Drupal 使用的 Symfony 库。从 Drupal 8.6.15 起,包含以下 Symfony PHP 及相关库:
"symfony/class-loader": "~3.4.0",
"symfony/console": "~3.4.0",
"symfony/dependency-injection": "~3.4.26",
"symfony/event-dispatcher": "~3.4.0",
"symfony/http-foundation": "~3.4.26",
"symfony/http-kernel": "~3.4.14",
"symfony/routing": "~3.4.0",
"symfony/serializer": "~3.4.0",
"symfony/translation": "~3.4.0",
"symfony/validator": "~3.4.0",
"symfony/process": "~3.4.0",
"symfony/polyfill-iconv": "^1.0",
"symfony/yaml": "~3.4.5",
"twig/twig": "^1.38.2",
"doctrine/common": "^2.5",
"doctrine/annotations": "^1.2",
...
注解(Annotations)
Drupal 8 使用 PHP 注解(@docblock 注释)来发现插件并为执行代码提供上下文和元数据。这些注解通过 Doctrine 注解解析器(v1.6) 读取,然后转化为 Drupal 可理解的信息。
了解更多关于 通过注解发现插件 的信息。
另请参阅:PHPDoc(维基百科)
插件(Plugins)
插件是一种可替换的小型功能实现。具有相似功能的插件属于同一类型。例如,“字段小部件”就是一种插件类型,每种小部件(如文本字段、日期等)都是通过插件实现的。
了解更多 Drupal 8 插件 API。
服务(Services)
在 Drupal 8 中,服务是由服务容器管理的对象。服务的概念用于分离可重用功能,使这些服务可插拔并可替换,通过注册到依赖注入服务容器实现。
另请参阅:面向 Drupal 开发者的服务容器
更多资源
以下是帮助你熟悉 Drupal 8 的更多资料: