パッケージからイベントリスナーの登録をするには?

2015年10月27日 at 13:43

ログイン時にイベント発火する処理を
application/bootstrap/app.php

Events::addListener('on_user_login', function($event) {
・・・処理・・・・
}

というような記述をして開発を進めているのですが、
このイベント時の処理をパッケージから追加したいと考えています。

上記のように、イベントに対するaddListener()は、
application/bootstrap/app.php
に書く事に成っているとすると、パッケージから追加するにはどのようにパッケージのインストールスクリプト(controller.php)に記述すればいいのか、ご教示頂けないでしょうか?
もしくは、それ以外の方法で、addListener()を設定する方法がありますでしょうか?

また、該当パッケージを削除した際には、このイベントフックも削除しないといけないかと思いますので、合わせて教えて頂けないでしょうか?

自分がやりたい事は、本家のURLだと、
http://www.concrete5.org/documentation/developers/5.7/packages/adding-custom-code-to-packages/
に書いてあると思うのですが、
この本家に書かれている内容が、いまひとつ飲み込めなく、咀嚼できておりません。

タグ:

Re: パッケージからイベントリスナーの登録をするには?

2015年10月27日 at 13:54
大事な事を書き忘れておりました。

環境は、5.7.5.2 と成ります。
 

Re: パッケージからイベントリスナーの登録をするには?

2015年10月28日 at 19:20
自己レスです。

下記で公開されているソースを読むと、packageのcontroller.phpでon_start()メソッドに
Events::addListener(’イベントフック名’, 処理を行う関数)
と書けば、イベント発火時の処理が登録されるようです。

http://github.com/ExchangeCore/Concrete5.7-text-icons/blob/master/accessibility/controller.php

前述の公式サイトもそう書かれていますね。

ただ、公式サイトのサンプルが、(英語力不足で?)よく理解できていません。
1つ目のサンプルコードは、前述の通りの事が書かれているのですが、
その後で、
Let's do this:
の後に書かれているサンプルの意味が分かっていません。
#この部分に該当する記述が、前述のgithubのコードには存在しない事もあって理解に及んでいません。

そして、'on_user_login'というイベントをパッケージのon_start()メソッド内でaddListenerしても、タイミング的に効果があるのか?などが、分かっていません。

前述のgithubも含め、参考になるソースが幾つか見つけられつつあるので、近々試してみますが、
この辺みるといいよ!
がありましたら、随時募集中です。