web-dev-qa-db-ja.com

.incファイルの代替

Drupal 8?の.incファイルの正しい代替は何ですか?つまり、必要なときにのみロードする必要があるいくつかの関数を作成したい場合、 D7のmodule_load_include()この関数はD8にも残っていますが、これは最適な手順ではないと聞きましたが、そうですか?

私はどこかで読んだことがありますが、ここではPHP traitsを使用することをお勧めします。ただし、useing a trait inside a .moduleファイルは良い方法です。

何か助け?

3
Pratip Ghosh

実際、D8で*.incファイルを使用することには何の問題もないようです。 Updateコアモジュールをご覧ください。非常にいくつかの*.incファイルが存在します: cgit.drupalcode.org


それでも、そのようなことに関しては、symfonyのベストプラクティスの例に従う傾向があります。

[Symfony Docs]ビジネスロジックの整理

[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();

そして、まだよくわからないときは、コアの内部を検索し、モジュールがどのようにしたかをモジュールに投稿します。

4
leymannx

他の回答を参照すると、これらの.incファイルがコアにまだ残っている主な理由は、すべてをクラス/サービスに書き直すことができなかったためです。これは、Drupal 8で間違いなく正しい方法です。

一部では、Drupal 8でサービスに変換される関数が増えており、非推奨となっています。静的メソッドの代わりに、それを行う必要があります。

これらのサービスを作成して使用する方法については、たくさんのチュートリアルとドキュメントがあります。参照 https://www.drupal.org/docs/8/api/services-and-dependency-injection/services-and- dependency-injection-in-drupal-8 など。

traitは、独自のサービスとして公開する必要のない複数のクラス間で共通のコードを共有する場合に使用できます。基本的には、組み込みのコピーと貼り付けであり、基本クラスに似ていますが、より柔軟です。

3
Berdir