如何在模块中包含自定义类文件?


10

在Drupal 7模块开发中,我可以使用module.info文件或drupal_load_included()函数中的file [] =指令包含自定义的inc,api或php类文件。

在使用PSR的D8中,打包“普通ole PHP对象”并在其中引用的正确方法是什么DefaultController.php?想是这样的:$a = new POPO();

仅提供包含该类的PHP文件就namespace足够了吗?控制器(或一般的模块)如何知道要引用或扫描该类?


此链接创建Drupal 8.x模块可能会有所帮助
Krishna Mohan 2014年

是的,我已经阅读了drupal.org/node/2087879,但是在没有看到file [] =指令的情况下,很遗憾,它没有回答这个文件包含的特定问题。
里克

Answers:


11

您不再使用file[] = ...。而是,类是自动加载的。例如,我有一个具有以下文件结构的模块:

  • views_hybrid /
    • views_hybrid.info.yml
    • views_hybrid.module
    • src /
      • 插入/
        • 领域/
          • FieldFormatter /
            • HybridFormatter.php

HybridFormatter.php 定义一个称为HybridFormatter的类。

在我的.module文件中,如果我开始输入IDE(在本例中为NetBeans),HybridFormatter则会自动完成,\Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::因为它是自动加载的。由于我不希望整个路径都乱七八糟,所以我在最上面放置了一行,

use Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter;

以及use针对我的模块使用的其他类的指令。

命名空间是在HybridFormatter.php中定义的,如下所示:

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }

因此,为确保我完全理解,HybridFormatter.php将自动加载...自动吗?不需要include_once()吗?HybridFormatter.php是否定义了名称空间?
瑞克(Rick)

有没有必要include_oncerequire_once什么的。Hybridformatter.php确实定义了一个名称空间。我将包括在答案中。
beth,2014年


9

我想补充一点,因为它包含一个不适合D8“插件,控制器,表单等”的自定义类。默认值,您仍然可以按照此处提到的PSR-4概述进行操作

对于我的用例,我在/ modules / custom / my_module / src /中放置了一个“ CustomClass.php”。在文件的开头,我包括了名称空间声明

namespace Drupal\my_module;

并在文件中我想在(在这种情况下为my_theme.theme)中使用它

use Drupal\my_module\CustomClass;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.