No Magento 2, quando você cria um plug-in "around"
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
você pode prosseguir para o próximo plug-in, culminando em chamar o método original real, chamando / chamando o $proceed
método passado . Esse é um padrão de design comum, geralmente visto nas implementações de middleware do PHP Frameworks.
Contudo - apresenta alguma confusão w / r / t aos detalhes da implementação. Especificamente
Se, além de um
aroundPlugin
, um objeto / classe tem umbefore
ouafter
plugin definido, quando é acionado em relação à cadeia de plugins?
ou seja, todos os métodos anteriores são acionados antes que qualquer método de plug-in em torno seja acionado? Ou será antes plugins única fogo antes da final, reais verdadeira incêndios método?
O problema específico que estou tentando rastrear é que não consigo conectar um plug-in ao método de despacho no controlador frontal do Magento 2 quando o Magento está no modo de cache de página inteira . O cache da página inteira opera por um plug-in que não chama $proceed($response)
. Eu tentei cavar parte do código em torno desses plugins e achei o sistema difícil de raciocinar sem saber como seus plugins se destinam.
ie - a descrição na página dev docs parece, nesta instância específica, imprecisa. Não está claro se a documentação está incorreta ou se é um bug recentemente introduzido, se é um caso de extrema importância ou se a configuração do meu plugin está errada.
Alguém sabe, por observação direta ou por conhecimento cultural, como essa priorização deve funcionar?
\closure $proceed
vs.\callable $proceed
em um plug-in? O documento oficial apenas menciona\callable
e nunca toca\closure
.