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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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) { // ॲཧ }