Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Drupal モジュール開発入門講座 第3回 フック

Drupal モジュール開発入門講座 第3回 フック

More Decks by アクイアジャパン Acquia Japan

Other Decks in Programming

Transcript

  1. ϑοΫͷ֓ཁ – ϑοΫ(Hooks)ͱ͸ɺDrupalͷಈ࡞Λมߋ͢ΔPHPؔ਺Ͱ͢ɻ – ϑοΫΛ࢖༻͢Δ͜ͱͰɺطଘͷίʔυΛॻ͖׵͑Δ͜ͱͳ͘ɺDrupalίΞ΍ଞϞδϡʔϧͷ ಈ࡞Λมߋɾ֦ுͰ͖·͢ɻ – ֤ϑοΫ͸ hook_batch_alter() ͷΑ͏ʹ

    hook_ Ͱ࢝·ΔҰҙͷ໊લɺఆٛࡁΈͷҰ࿈ͷύϥ ϝʔλʔɺఆٛࡁΈͷ໭Γ஋͕༻ҙ͞Ε͍ͯ·͢ɻ https://www.drupal.org/docs/creating-custom- modules/understanding-hooks
  2. ϑοΫͷ࣮૷ྫ <?php use Drupal\Core\Form\FormStateInterface; /** * Implements hook_form_alter(). */ function

    marucha_form_alter(&$form, FormStateInterface $form_state, $form_id) { if ($form_id == 'comment_comment_form') { $form['actions']['submit']['#value'] = 'Comment!'; } } hook_form_alterؔ਺Λ࢖༻࣮ͨ͠૷ྫͰ͢ɻ marucha.module
  3. ϑοΫͷ࣮૷ྫ <?php use Drupal\Core\Form\FormStateInterface; /** * Implements hook_form_alter(). */ function

    marucha_form_alter(&$form, FormStateInterface $form_state, $form_id) { if ($form_id == 'comment_comment_form') { $form['actions']['submit']['#value'] = 'Comment!'; } } DocComment Ͱؔ਺ͷઆ໌ Λهड़͠· ͢ɻ ؔ਺໊Λ hook -> maruch a ʹॻ͖׵͑· ͢ɻ hook_form_alterؔ਺Λ࢖༻࣮ͨ͠૷ྫͰ͢ɻ marucha.module ϑοΫ͕ൃՐͨ͠ࡍʹ ࣮ߦ͍ͨ͠ॲཧΛهड़͠· ͢ɻ ϑοΫʹΑͬͯ͸Ҿ਺΍໭Γ஋ ͕༻ҙ͞Ε͍ͯΔ΋ͷ͕͋Γ· ͢ɻ
  4. ϑοΫΛυΩϡϝϯτԽ͢Δ – ϞδϡʔϧσΟϨΫτϦʹ *.api.php ϑΝΠϧΛ࡞੒͠ɺϑοΫΛจॻԽ͠·͢ɻ – *.api.php Ͱهड़ͨ͠ίʔυ͸࣮ߦ͞Ε·ͤΜɻ /** *

    Hello world hook. * * This hook allows you to do something * when node loaded using hook_ENTITY_TYPE_view(). */ function hook_marucha_hello_world() { \Drupal::messenger() ->addStatus('Hello world!'); } marucha.api.php DocCommentͰ࣍ͷ৘ใΛఏڙ͠·͢ɻ • ϑοΫͷઆ໌ • ύϥϝʔλʢ͋Ε͹ʣ • ໭Γ஋ʢ͋Ε͹ʣ αϯϓϧίʔυΛఏڙ͠· ͢ɻαϯϓϧίʔυͳͷͰ࣮ ߦ͞Ε·ͤΜɻ
  5. ϑοΫͷݺͼग़͠ྫ marucha.module /** * Implements hook_ENTITY_TYPE_view(). */ function marucha_node_view(array &$build,

    EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) { \Drupal::moduleHandler()->invokeAll('marucha_hello_world'); } module_handlerαʔϏεͷinvokeAll() Λར༻ͯ͠ɺࣗ࡞ϑοΫͰ͋Δ hook_marucha_hello_worldΛݺͼग़ ͠·͢ɻ
  6. ࿅श໰୊1 Marucha(Ϛγϯ໊ɿmarucha)ϞδϡʔϧͰɺmarucha.moduleϑΝΠϧʹ࣍ͷΑ͏ʹϑοΫΛ࣮ ૷ͨ͠ͱ͜ΖɺϑοΫ಺ͷॲཧ͸࣮ߦ͞Ε·ͤΜͰͨ͠ɻߟ͑ΒΕΔݪҼΛ͔࣍Β1ͭબ୒ͯ͠ ͍ͩ͘͞ɻ
 1. ؔ਺໊ͷ hook ΛϞδϡʔϧϚγϯ໊ʹஔ͖׵͍͑ͯͳ͍ɻ 2. ΩϟογϡΫϦΞΛ͍ͯ͠ͳ͍ɻ

    3. ؔ਺ʹDocComment͕༻ҙ͞Ε͍ͯͳ͍ɻ 4. ϑοΫΛ࣮૷͢ΔϑΝΠϧΛؒҧ͍͑ͯΔɻ 5. add_action()ؔ਺ͰϑοΫΛొ࿥͢Δඞཁ͕͋Δɻ <?php function hook_user_login(UserInterface $account) { // ॲཧ }
  7. ࿅श໰୊1 Marucha(Ϛγϯ໊ɿmarucha)ϞδϡʔϧͰɺmarucha.moduleϑΝΠϧʹ࣍ͷΑ͏ʹϑοΫΛ࣮ ૷ͨ͠ͱ͜ΖɺϑοΫ಺ͷॲཧ͸࣮ߦ͞Ε·ͤΜͰͨ͠ɻߟ͑ΒΕΔݪҼΛ͔࣍Β1ͭબ୒ͯ͠ ͍ͩ͘͞ɻ
 1. ؔ਺໊ͷ hook ΛϞδϡʔϧϚγϯ໊ʹஔ͖׵͍͑ͯͳ͍ɻ 2. ΩϟογϡΫϦΞΛ͍ͯ͠ͳ͍ɻ

    3. ؔ਺ʹDocComment͕༻ҙ͞Ε͍ͯͳ͍ɻ 4. ϑοΫΛ࣮૷͢ΔϑΝΠϧΛؒҧ͍͑ͯΔɻ 5. add_action()ؔ਺ͰϑοΫΛొ࿥͢Δඞཁ͕͋Δɻ <?php function hook_user_login(UserInterface $account) { // ॲཧ }