今回はDrupalのフック関数について解説します。
前回のフォルダ構成で触れた「横から割り込めるフック処理を入れるmarucha.module以外については必須です。」という部分についての深掘りになります。
①.moduleファイル作成
とりあえず先ずはフック関数がどういう実装になるかです。
下記のようにmarucha_form_alterという感じでモジュール名を入れる必要があります。
hook_form_alter()が元々の形で、Drupalのコア機能が用意しているものになります。
<?php
use Drupal\Core\Form\FormStateInterface;
function marucha_form_alter(&$form, FormStateInterface $form_state, $form_id) {
// $form_idで対象を絞らないと、サイト内のすべてのフォームに影響する。
if ($form_id === 'search_block_form') {
$form['actions']['submit']['#value'] = t('Marucha検索');
}
}
②割り込み動作
こういった処理を追加すると画面へ表示する前に関数が呼ばれ、見た目が変わったりします。例えば、標準だと、送信ボタンとしか表示されないものをマル茶検索ボタンに変更するといった具合です。
メイン処理を書き換えることなく、コア依存が高いものでも変更を加えていくような再開発が可能になります。 ※技術的にはコントローラのみで実装するなどの代替手段はありますが、その場合コード行数がコア並みに多くなるため見辛くなります。
③キャッシュクリア
面倒かもしれませんが、前回同様にキャッシュクリアが必要になります。
下記コマンドを相当するディレクトリ配下で打つとフックのソースコードが適用ということになります。
Macターミナルかつddev環境を前提に例で挙げます。
ddev drush cr
④注意点
一応ですが、このフックという書き方はコア依存が強いため、Drupalのバージョンを上げた際の動きがどうなるのかは若干謎です。(アクイアの方針的には後方互換継続)
バージョンアップの際に試験工数が増えるというのはデメリットかもしれません。
⑤感想
セミオーダーメイド的な開発が可能になっており、柔軟に速い開発対応が出来るというのが良いかなと思いました。
また、フック自体のコード量は比較的少なくなりそうなので、実装内容が分かりやすいのも良いなと思いました。
- 閲覧数 18
コメントを追加