En Magento 2, cuando creas un complemento "alrededor"
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
puede continuar con el siguiente complemento, que culmina con llamar al método original real, llamando / invocando el $proceed
método pasado . Este es un patrón de diseño común, a menudo visto en implementaciones de middleware PHP Frameworks.
Sin embargo, presenta cierta confusión con respecto a los detalles de implementación. Específicamente
Si, además de un
aroundPlugin
, un objeto / clase tiene unbefore
o unafter
complemento definido, ¿ cuándo se activan en relación con la cadena de complementos circundantes?
es decir, ¿se activarán todos los métodos anteriores antes de que se active alguno de los métodos de complementos? ¿O antes de que los complementos solo se activen antes de que se active el método real real final ?
El problema específico que estoy tratando de rastrear es que parece que no puedo obtener un complemento adjunto al método de envío del controlador frontal Magento 2 cuando Magento está en modo de almacenamiento en caché de página completa . La caché de página completa funciona mediante un complemento de entorno que no llama $proceed($response)
. He intentado profundizar en algunos de los códigos que rodean estos complementos y he encontrado que es difícil razonar sobre el sistema sin saber cómo se supone que funcionan esos complementos.
es decir, la descripción en la página de documentos de desarrollo parece, en esta instancia específica, ser inexacta. No está claro si la documentación es incorrecta, o si se trata de un error introducido recientemente, si se trata de un caso límite o si la configuración de mi complemento es incorrecta.
¿Alguien sabe, por observación directa o por conocimiento cultural, cómo se supone que funciona esta priorización?
\closure $proceed
vs.\callable $proceed
en un complemento? El documento oficial solo menciona\callable
y nunca toca\closure
.