Magento 2で、「around」プラグインを作成するとき
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
渡されたメソッドを呼び出し/呼び出すことで、実際の元のメソッドの呼び出しで終了するプラグインの周りの次のステップに進むことができます$proceed
。これは、PHPフレームワークのミドルウェア実装でよく見られる一般的なデザインパターンです。
ただし、実装の詳細に多少の混乱があります。具体的には
場合は、に加えて
aroundPlugin
、オブジェクト/クラスが持っているbefore
かafter
、定義されたプラグインをするとき、彼らはプラグイン周りのチェーンに関連して火災のですか?
すなわち、すべてのbeforeメソッドは、Aroundプラグインメソッドが起動する前に起動しますか?または、プラグインが最終的な実際の実際のメソッドが起動する前にのみ起動しますか?
私が突き止めようとしている特定の問題は、Magentoがフルページキャッシュモードのときに、Magento 2フロントコントローラーのディスパッチメソッドにプラグインを接続できないように見えることです。フルページキャッシュは、を呼び出さない aroundプラグインによって動作します$proceed($response)
。私はこれらのプラグインを取り巻くコードのいくつかを掘り下げてみましたが、そのプラグインがどのように機能するかを知らずにシステムを推論することは困難であることがわかりました。
つまり、dev docsページの説明は、この1つの特定のインスタンスでは不正確であるように見えます。ドキュメントが間違っているのか、これが最近導入されたバグなのか、エッジケースなのか、プラグインの設定が間違っているのかは不明です。
この優先順位付けがどのように機能するのか、直接観察することにより、または文化的知識により、誰もが知っていますか?
\closure $proceed
対\callable $proceed
中Aプラグインを?公式ドキュメントはのみ言及\callable
し、上に触れることはありません\closure
。