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

Drupal モジュール開発入門講座 第6回 イベント

Drupal モジュール開発入門講座 第6回 イベント

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

Other Decks in Programming

Transcript

  1. ϑοΫͱΠϕϯτ Drupal 7 Drupal 8 Drupal 9 ɾɾɾ ɾɾɾ ϑοΫ͸ɺDrupal

    Xͷ࣌୅͔Βݱࡏʹ͔͚ͯଘࡏ͢Δ Drupal 8Ҏ߱ʹΠϕϯτγεςϜొ৔ Πϕϯτͷํ͕ޙൃɻͰ͸ ͳͥΠϕϯτγεςϜ͕ಋ ೖ͞ΕͨͷͩΖ͏ʁ
  2. Πϕϯτͷ࢓૊Έ config.save ModuleA::onConfigSave ModuleB::onSave ModuleC::notify DrupalίʔυͷͲ͔͜ʹΠ ϕϯτΛݺͼग़͢(ʹσΟε ύον͢Δ)هड़͕ଘࡏ͢Δ ίʔυ಺ͰΠϕϯτ͕ݺ ͼग़͞ΕͨΒɺΠϕϯτ

    ʹඥ͍͍ͮͯΔαϒεΫ ϥΠό(PHPؔ਺)͕࣮ߦ ͞ΕΔ … ༏ઌ౓ɿ 
 ̍ ༏ઌ౓ɿ 
 ̍̌ ༏ઌ౓ɿ 
 ̑̌ ModuleC::onSave ༏ઌ౓ɿ 
 ̍̌̌ Πϕϯτ ࣮ߦॱংͷࢦఆՄೳʂ ಉϞδϡʔϧͰෳ਺ͷ αϒεΫϥΠόΛొ࿥ Մೳʂ ΠϕϯταϒεΫϥΠό ΠϕϯταϒεΫϥΠό ΠϕϯταϒεΫϥΠό ΠϕϯταϒεΫϥΠό
  3. ϑοΫγεςϜ ΠϕϯτγεςϜ Πϕϯτ໊ hook_ Ͱ࢝·Δ໋໊نଇ͕͋Δɻ ྫɿhook_form_alter PHPΫϥεͷఆ਺ͱͯ͠ఆٛɻ ྫɿConfigEvents::SAVE ΠϕϯτΛσΟεύον͢ Δ

    module_handlerαʔϏεΛར༻ͯ͠Π ϕϯτΛݺͼग़͢ɻ ྫɿ\Drupal::moduleHandler()
 ->invokeAll() event_dispatcherαʔϏεΛར༻ͯ͠Πϕ ϯτΛݺͼग़͢ɻ ྫɿ$event_dispatcher->dispatch($event, ConfigEvents::SAVE) ΠϕϯταϒεΫϥΠό *.moduleϑΝΠϧ಺ʹؔ਺Λ࡞੒͢Δɻ ྫɿmarucha_form_alter() EventSubscriberInterfaceΛ࣮૷ͨ͠PHP Ϋϥεʹؔ਺Λ࡞੒͢Δɻ ྫɿMarucha::onConfigSave() ΠϕϯτΛαϒεΫϥΠϒ ͢Δ ಛఆͷ໊લͰؔ਺(ΠϕϯταϒεΫϥ Πό)Λఆٛ͢Δ͜ͱʹΑͬͯࣗಈతʹ γεςϜʹొ࿥͞ΕΔɻ ΠϕϯταϒεΫϥΠόΫϥεͷ getSubscribedEvents()ؔ਺ͰɺαϒεΫ ϥΠϒ͍ͨ͠ΠϕϯτΛࢦఆ͢Δɻ͜ͷ ࡍʹ༏ઌ౓ΛࢦఆՄೳɻ ࢀߟ) ϑοΫͱΠϕϯτͷରԠද
  4. ΠϕϯτΛαϒεΫϥΠϒ͢Δํ๏ 1. ར༻͍ͨ͠ΠϕϯτΛ୳͠·͢ɻ 2. *.services.ymlϑΝΠϧΛ࡞੒ͯ͠ɺαϒεΫϥΠόΛDrupalʹొ ࿥͠·͢ɻ 3. EventSubscriberInterfaceΛ࣮૷ͨ͠ΠϕϯταϒεΫϥΠόΫϥ εΛ࡞੒͠·͢ɻ 4.

    αϒεΫϥΠόΫϥε಺Ͱɾɾɾ a. getSubscribedEvents()ؔ਺Λ࣮૷ͯ͠ɺ
 Πϕϯτ໊ => ؔ਺໊ ͷ഑ྻΛฦ٫͠·͢ɻ b. getSubscribedEvents()ؔ਺Ͱࢦఆͨؔ͠਺Λ࣮૷͠·͢ɻ
  5. ར༻ՄೳͳΠϕϯτΛݟ͚ͭΔํ๏ ·ͱΊ ࢀরઌ ίΞ Symfony/ίϯτϦϏϡʔ τϞδϡʔϧ/ΧελϜϞ δϡʔϧ api.drupal.org ֎෦WebαΠτ ̋

    ʔ @EventͰͷจࣈྻݕࡧ ίʔυϕʔε ̋ ̋ DevelϞδϡʔϧ ର৅ͷDrupalαΠτͷ؅ཧը໘ ̋ ̋ Web ProfilerϞδϡʔ ϧ ର৅ͷDrupalαΠτͷ؅ཧը໘ ̋ ※ ̋ ※ ※ ϦΫΤετຖʹݺͼग़͞Εͨ/͞Εͳ͔ͬͨΠϕϯτҰཡ͕֬ೝ Ͱ͖Δ