モジュールにカスタムクラスファイルを含めるにはどうすればよいですか?


10

Drupal 7モジュール開発では、module.infoファイルまたはdrupal_load_included()関数のfile [] =ディレクティブを使用して、カスタムのinc、api、またはphpクラスファイルを含めることができます。

D8がPSRを使用している場合、「プレーンなOLE PHPオブジェクト」をパッケージ化してそれを参照する適切な方法は何DefaultController.phpですか?次のように考えてください$a = new POPO();

クラスを含むPHPファイルを指定するnamespaceだけで十分ですか?コントローラ(または一般的なモジュール)は、そのクラスを参照またはスキャンする方法をどのように知っていますか?


このリンクDrupal 8.xモジュールの作成が役立つかもしれません
Krishna Mohan

はい、私はdrupal.org/node/2087879を読みましたが、file [] =ディレクティブが表示されなかったため、残念ながらこのファイルを含めるという特定の質問に答えることができませんでした。
Rick

回答:


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は名前空間を定義します。回答に含めます。
2014

@beth手伝ってくれませんか?drupal.stackexchange.com/questions/233565/...
ロビンソン

9

D8の「プラグイン、コントローラー、フォームなど」に適合しないカスタムクラスを含めるために、それを追加したいと思います。デフォルト、ここに記載されているPSR-4の概要のように、まだそうすることができます

私の使用例では、「CustomClass.php」を/ modules / custom / my_module / src /にドロップしましたファイルの先頭に名前空間宣言を含めました

namespace Drupal\my_module;

そして、私がそれを使用したかったファイル(この特定のケースではmy_theme.theme)に追加しました

use Drupal\my_module\CustomClass;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.