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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

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αΠτͷ؅ཧը໘ ̋ ※ ̋ ※ ※ ϦΫΤετຖʹݺͼग़͞Εͨ/͞Εͳ͔ͬͨΠϕϯτҰཡ͕֬ೝ Ͱ͖Δ