【随時更新】Drupal 8, 9チートシート

著者
Kato83
作成日
2020/10/25 - 10:20
更新日
2023/03/03 - 00:07

Drupal 8, 9の個人的によく使う実装、DrushやDrupal Consoleのコマンドをまとめてみました。

※以下、Drupal 8 及び Drupal 9を Drupal と略します。Drupal 7 は今回の記事から対象外となります。

ログ出力 (Logging API)

Drupal のコアモジュール Database Logging を有効にした上で、ログ出力の処理をすることで /admin/reports/dblog にて任意のログメッセージを出力をすることができます。

参照元

LoggerInterface | LoggerInterface.php | Drupal 9.0.x | Drupal API
Logging API | Logging API | Drupal guide on Drupal.org

// プレースホルダーを用いたログ
$title = 'example test title';
$foo = 'some messages';
\Drupal::logger('someKey')->notice('Title : @title, Foo :@foo', [
  '@title' => $title,
  '@foo' => $foo,
]);

// エラーレベルを指定することもできる
\Drupal::logger('someKey')->debug('some message');
\Drupal::logger('someKey')->info('some message');
\Drupal::logger('someKey')->notice('some message');
\Drupal::logger('someKey')->warning('some message');
\Drupal::logger('someKey')->error('some message');
\Drupal::logger('someKey')->critical('some message');
\Drupal::logger('someKey')->alert('some message');
\Drupal::logger('someKey')->emergency('some message');

// PHPのマジックメソッド __toString() を実装していない
// オブジェクトの場合、各種export, dump系の関数を用いる
\Drupal::logger('someKey')->debug(var_export(['orange', 'apple', 'banana'], true));

コマンドラインでのキャッシュクリア

いずれかの方法でキャッシュクリアが出来ます。

Drush の場合

# キャッシュ全体的にクリア
$ drush cr
# キャッシュを一部クリア
$ drush cc

 Choose a cache to clear [all]:
  [0] Cancel
  [1] drush
  [2] theme-registry
  [3] router
  [4] css-js
  [5] render
  [6] plugin
  [7] bin
  [8] views
 > 4

 [success] 'css-js' cache was cleared.

Drupal Console の場合

すみません、Drupal Console でのキャッシュクリアは Drupal 9 に対応されておらず、検証できていないです。
検証できていないですが、以下のコマンドを用いてキャッシュクリアができます。

https://github.com/hechoendrupal/drupal-console/issues/4250#issuecomment-680300452

$ drupal cr

Node のプレビュー判定

コンテンツ編集フォームの下部にある Preview ボタンを押下した際の node エンティティを取得するのにはちょっとコツが必要。
プレビューの判定を行ってからそれぞれの node エンティティを取得する処理を実装する必要があります。

$routeName = \Drupal::routeMatch()->getRouteName();
$isPreview = $routeName === 'entity.node.preview';
$nodeEntity = \Drupal::routeMatch()->getParameter($isPreview ? 'node_preview' : 'node');
Category