EC-CUBE / ec-cube3

EC-CUBE official repository version 3
https://www.ec-cube.net/
Other
13 stars 24 forks source link

プラグインのフックポイントの挙動がおかしい #10

Open nobuhiko opened 6 years ago

nobuhiko commented 6 years ago

概要(Overview)

https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=20377&forum=9&post_id=86772#forumpost86772

期待する内容(Expect) or 要望 (Requirement)

eccube.event.front.response はフロントの画面にのみ作用する

再現手順(Procedure)

eccube.event.front.responseを使っているプラグインがある状態で、帳票出力プラグインを使って帳票を出力するとエラーが出る

環境 (environment)

okazy commented 6 years ago

コミュニティページでshiro8さんがご指摘いただいている以下が原因のようです。

https://github.com/EC-CUBE/ec-cube/blob/master/src/Eccube/Application.php#L800

if (strpos($route, 'admin') === 0) {
    // 管理画面
    $app['eccube.event.dispatcher']->dispatch('eccube.event.admin.response', $event);
} else {
    // フロント画面
    $app['eccube.event.dispatcher']->dispatch('eccube.event.front.response', $event);
}

こちらでは、ルーティング名が admin から始まっているかどうかで実行されるイベントがフロント画面か管理画面かを判定しています。 プラグインでは例えば plugin_admin_order_pdf 等のように admin 以外の文字から始まるルーティング名を設定することがきますので、この場合にフロント画面に設定されているイベントが実行されてしまいます。

フロント画面か管理画面かの判定はルーティング名ではなく、実際にアクセスされたURLが管理画面のものかどうかで判定するように修正をする必要があるかとおもいます。

例)

if ($app->isAdminRequest()) { ...

(修正箇所は6箇所)