В Magento 2, когда вы создаете плагин "вокруг"
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
Вы можете перейти к следующему плагину, который завершается вызовом фактического оригинального метода, вызывая / вызывая переданный $proceed
метод. Это общий шаблон проектирования, часто встречающийся в реализациях промежуточного программного обеспечения PHP Frameworks.
Однако - это вносит некоторую путаницу в детали реализации. конкретно
Если в дополнение к
aroundPlugin
объекту / классу определен плагинbefore
илиafter
, когда они запускаются относительно цепочки вокруг плагинов?
т. е. будут ли срабатывать все методы before перед тем, как сработают все методы плагинов? Или плагины будут срабатывать только до того, как сработает последний реальный метод?
Конкретная проблема, которую я пытаюсь отследить, заключается в том, что я не могу подключить плагин к методу диспетчеризации фронт-контроллера Magento 2, когда Magento находится в режиме полного кэширования страниц . Кеш полной страницы работает вокруг плагина, который не вызывает $proceed($response)
. Я попытался покопаться в некотором коде вокруг этих плагинов и обнаружил, что систему трудно рассуждать, не зная, как предполагается, что плагины работают.
то есть - описание на странице документации разработчика , в данном конкретном случае, представляется неточным. Неясно, является ли документация неправильной, или это недавно введенная ошибка, является ли это крайним случаем, или если моя конфигурация плагина неверна.
Кто-нибудь знает по прямому наблюдению или культурным знаниям, как должна работать эта расстановка приоритетов?
\closure $proceed
против\callable $proceed
в плагине? Официальный документ только упоминает\callable
и никогда не затрагивает\closure
.