Drupal 8?の.incファイルの正しい代替は何ですか?つまり、必要なときにのみロードする必要があるいくつかの関数を作成したい場合、 D7のmodule_load_include()
この関数はD8にも残っていますが、これは最適な手順ではないと聞きましたが、そうですか?
私はどこかで読んだことがありますが、ここではPHP traits
を使用することをお勧めします。ただし、use
ing a trait
inside a .moduleファイルは良い方法です。
何か助け?
実際、D8で*.inc
ファイルを使用することには何の問題もないようです。 Updateコアモジュールをご覧ください。非常にいくつかの*.inc
ファイルが存在します: cgit.drupalcode.org 。
それでも、そのようなことに関しては、symfonyのベストプラクティスの例に従う傾向があります。
[Stack Overflow] Symfony2でモデルヘルパー関数を配置する場所
src/Utils
の下に新しいクラスを追加することを意味します。例えば:
src/Utils/HelperFunctions.php
src/Utils/FooBar.php
そして、必要なときはいつでも、それを参照します。
use Drupal\MYMODULE\Utils\HelperFunction;
use Drupal\MYMODULE\Utils\FooBar;
次に、次のような特定の関数を呼び出します。
$site_color = HelperFunctions::getSiteColor();
$foo_bar = FooBar::returnFooBar();
そして、まだよくわからないときは、コアの内部を検索し、モジュールがどのようにしたかをモジュールに投稿します。
他の回答を参照すると、これらの.incファイルがコアにまだ残っている主な理由は、すべてをクラス/サービスに書き直すことができなかったためです。これは、Drupal 8で間違いなく正しい方法です。
一部では、Drupal 8でサービスに変換される関数が増えており、非推奨となっています。静的メソッドの代わりに、それを行う必要があります。
これらのサービスを作成して使用する方法については、たくさんのチュートリアルとドキュメントがあります。参照 https://www.drupal.org/docs/8/api/services-and-dependency-injection/services-and- dependency-injection-in-drupal-8 など。
trait
は、独自のサービスとして公開する必要のない複数のクラス間で共通のコードを共有する場合に使用できます。基本的には、組み込みのコピーと貼り付けであり、基本クラスに似ていますが、より柔軟です。