用途:面向 Drupal 11 的钩子(hook)开发技能,指导编写与选择 OOP 钩子或过程式钩子,并说明钩子与 Symfony 事件订阅者的适用区别。
主要能力:OOP 钩子位于 src/Hook/MyModuleHooks.php,命名空间为 Drupal\my_module\Hook,在 Drupal 11.1+ 自动注册,无需 services.yml;支持构造器注入依赖,可直接实例化并注入 mock,便于测试。使用 #[Hook('name')] 属性标注钩子方法,示例包括 hook_form_node_article_form_alter、hook_form_alter、hook_node_presave 与 hook_theme;其中定向表单钩子只在特定表单 ID 触发,通用 form_alter 需显式判断 $form_id。也可用 StringTranslationTrait 提供 $this->t()。过程式钩子写在 .module 中,按 my_module_hook_name() 命名自动发现,仍有效,但新代码建议优先 OOP 钩子。
使用方式:新实现优先在 src/Hook/ 写 OOP 钩子;类不在 src/Hook/ 时需手动注册服务,可通过 autowire: true 按类型提示解析依赖。若钩子未执行,检查命名空间与位置。
适用场景:需要扩展 Drupal 核心或贡献模块行为、处理表单修改、实体保存前逻辑、主题定义等;OOP 钩子尤适合需依赖注入与单元测试的场景。需要响应 Symfony 派发事件或构建松耦合逻辑时,则使用事件订阅者。
限制:资料未提供版本之外的兼容范围、性能数据、收费或价格信息;自动注册仅适用于 Drupal 11.1+ 且类位于 src/Hook/ 的情况;其余条件需手动注册。