バージョン選択

フォーラム

メニュー

オンライン状況

49 人のユーザが現在オンラインです。 (39 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 49
もっと...

サイト内検索

質問 > 管理機能 > EventArgs eventDispatcherについて教えてください。

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
fffggg
投稿日時: 2021/12/20 18:00
対応状況: −−−
新米
登録日: 2021/11/11
居住地:
投稿: 8
EventArgs eventDispatcherについて教えてください。
▼テンプレート
[EC-CUBE] 4系
[レンタルサーバ] 不明
[OS] windows10
[PHP] 7.1.3
[データベース] SQL、
[WEBサーバ] 不明
[ブラウザ] Chrome
[導入プラグインの有無] 諸々
[カスタマイズの有無] 有

[現象]
特に管理画面などのコントローラの中で"EventArgs"や"eventDispatcher"などを頻繁に目にするのですが,それらが何をしているのか全く分かりません。
eventDispatcherとSymfonyのドキュメントを検索すると,"event dispatcher componet", (https://symfony.com/doc/current/components/event_dispatcher.html) が出てくるのですが,これを読めば,eccubeでどういう使われ方をしているのかわかるようになりますか?

また,eventArgsについては,symfonyのドキュメントにはそれについての情報がないので,何か説明や,説明をしているページのリンクを教えていただけますでしょうか。
468
投稿日時: 2021/12/21 15:14
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: EventArgs eventDispatcherについて教えてください。
ECCUBEのPHPソース内に出てくるeventDispatcherですが
プラグインやカスタマイズしたソース等本体以外で定義した処理を実行させるフックポイントになります。
(自作した処理を挿入できる場所になります)

$this->eventDispatcher->dispatch(XXXXXX, $event);
ほとんど上記のような使われ方をしていると思いますが
プラグイン側で第1引数のXXXXXXの文字列を指定して任意のフックポイントに処理を挿入する事ができます。
(第1引数のXXXXXXを元に有効化されたプラグイン内のイベントを探して実行します)

EventArgsはそのプラグイン側の処理に渡すデータを格納したオブジェクトになります。
渡されるデータはフックポイント毎に異なる為、ソースコードを直接確認する必要があるかと思います。

フックポイントの利用方法は以下のページが分かりやすいかと思います。
https://kumahiyo.com/event-subscriber/


eccube4.0.1の管理画面 商品一覧ページを表示する際の
$this->eventDispatcher->dispatch(EccubeEvents::ADMIN_PRODUCT_INDEX_SEARCH, $event);
(/src/Eccube/Controller/Admin/Product/ProductController.php function index()内 256行目)
を例にすると

第一引数はEccubeEvents::ADMIN_PRODUCT_INDEX_SEARCH となっています。

自作したクラス側で
function getSubscribedEvents()に
return [
    EccubeEvents::ADMIN_PRODUCT_INDEX_SEARCH => 'aaa',
];

のような定義をすると同じ自作クラス内の
function aaa(EventArgs $event){
    
}

がProductController.php 256行目で呼び出されるようになります。

自作クラスfunction aaa()には
引数に$eventが渡ってきますが、この時の$eventの中身は
ProductController.php 248~254行目で定義されたdispatch()の第2引数
$event = new EventArgs(
    [
        'qb' => $qb,
        'searchData' => $searchData,
    ],
    $request
);

が渡ってきます。

$event->getArgument("qb")や$event->getArgument("searchData")を指定する事で
必要なデータを参照する事ができます。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

fffggg
投稿日時: 2021/12/21 20:35
対応状況: −−−
新米
登録日: 2021/11/11
居住地:
投稿: 8
Re: EventArgs eventDispatcherについて教えてください。
shirohachi様

ご丁寧に解説,また理解の助けになる記事をご紹介いただき,ありがとうございました!!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,039名です
総投稿数は110,020件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.