
欢迎加入我们的 Google Hangout 直播会议,时间为每月最后一个星期二上午 9 点(太平洋时间)。
2020 年 3 月临时调整:本月会议将于 3 月 24 日(星期二)上午 11:30(PT)举行,因时间冲突进行调整。


基础知识
在 Drupal 8 中,简洁 URL(Clean URLs)默认启用且无法禁用。不过,你的 Web 服务器上必须安装重写模块(mod_rewrite)。
请检查浏览器地址栏。你的网站 URL 不应包含 ?q=。
正确的“简洁 URL”示例:
http://www.example.com/node/83
无法正常工作的 URL 示例:
http://www.example.com/?q=node/83
针对不同系统(如 Apache、WAMP、XAMPP 和 IIS)有额外的简洁 URL 设置指南。
启用简洁 URL 的服务器配置
在独立服务器(httpd.conf)上配置简洁 URL
在独立服务器上启用简洁 URL 包括以下步骤:


Drupal 8 使用了许多 PHP 的高级功能和复杂的第三方库,为开发者提供了所有 CMS 中最先进的 API。虽然有经验的 Drupal 7 开发者会注意到一些重大变化,但大部分基础结构仍然熟悉。
如果在学习本模块开发者分步指南(D8)时,有些内容对你来说是新的,那么以下资料可能会有所帮助。不过,进入 D8 模块部分 并不需要完全掌握所有知识。
面向对象编程(OOP)
虽然最初看起来令人望而生畏,但 OOP 已被证明是最佳实践。
要了解 PHP 的最佳实践,请阅读 phptherightway.com。Drupal 并未使用其中所有记录的工具和方法,但该网站是学习 PHP 语言功能的绝佳入门。
通过阅读 PHP 官方关于类与对象的文档以及以下优秀教程,更新你的 OOP 知识:


在本教程的以下小节中,我们将创建 Drupal 网站的不同部分示例,例如自定义页面、区块、实体、字段等。所有示例都从模块文件夹和 .info.yml 文件开始,仅凭这两个文件,模块就会显示在 Drupal 8 的“扩展”管理页面上,或者可以通过 Drush 直接启用。
本小节将引导你完成模块启动的流程,包括创建、命名以及正确放置 .info.yml 文件,这将成为你创建的每个新模块的起点。
如果你想克隆本节中提供的代码示例的 git 仓库,你需要先安装 git 并按照相关说明进行操作。你可以使用以下命令克隆 git 仓库:
git clone https://github.com/sidharrell/D8HWexample.git modules/custom/hello_world
所有文件默认都会被下载,但你可以通过检出“骨架”版本来隐藏它们,以便从最简结构开始。要这样做,请进入模块目录并运行以下命令:


在开始之前
如果你希望 PHP 在测试站点上帮助你发现错误,请尝试此处描述的设置:开发时显示所有错误。
为你的模块命名
创建模块的第一步是为它选择一个“简短名称”或机器名(machine name)。该机器名将在模块的多个文件和函数中使用,Drupal 核心也会在程序中使用该名称来识别你的模块。
在选择机器名时,需要遵循以下几个重要规则:


主题核心:项目元数据
.info.yml 文件(也称为 “info yaml 文件”)是 Drupal 8 模块、主题或安装配置文件的重要组成部分,用于存储项目的元数据。
这些 .info.yml 文件的作用包括:
- 告诉 Drupal 模块、主题或安装配置文件的存在。
- 区分不同类型的主题或模块。
- 为 Drupal Web UI 管理页面提供信息。
- 指定模块启用和禁用的管理条件,以及与 Drupal 版本的兼容性。
- 在其他上下文中的一般管理用途。


在开发自定义模块时,有一些场景要求开发人员在模块中添加 composer.json 文件。其中一些场景取决于自定义模块是否打算作为一个项目提交到 drupal.org 社区。
如果模块开发者想要使用托管在 packagist.org 上的 PHP 库,他们必须在项目中添加 composer.json 文件。
如果模块是 drupal.org 上发布的模块,它依赖于其他模块,并且想要在开发过程中使用 DrupalCI 测试这些依赖的更改,那么它必须有一个 composer.json 文件来声明这些 Drupal 模块的依赖关系。(DrupalCI 只能检测 composer.json 中补丁的依赖更改,而不能检测 .info 或 .info.yml 文件中的更改。)
如果模块开发者希望使用 composer.json 提供的更灵活的版本约束(例如插入符号或波浪号运算符),这些功能只能在 composer.json 中实现。(虽然 Drupal 本身不会受这些约束影响,但如果最终用户使用 Composer 构建他们的网站,这些约束会在构建过程中被遵守。)


在接下来的部分中,我们将讲解如何创建一个简单的模块。有一个由来已久的传统:当你在任何新系统中编写第一段程序时,它会在屏幕上输出 “Hello World!”。
虽然 Drupal 是最具雄心和前瞻性的开源项目之一,但它也深深扎根于科学和工程领域的悠久传统之中。
在开始使用本分步指南中的代码之前,请按照这里的说明准备好模块框架:准备模块框架
Drupal 8 Interconnections 是一个演示页面,展示了模块组件之间的相互关系。


HelloController 类中的 content() 方法将在路由系统调用页面时返回标记文本。
在你的模块目录中,应当有一个符合 PSR-4 标准的文件夹结构 /src/Controller,在该文件夹中你需要创建控制器文件 HelloController.php。
因此,你的控制器文件路径应为
/src/Controller/HelloController.php
在 HelloController.php 文件中,你将拥有如下代码:
