禁用 Magento 2 中特定控制器的全页缓存

Aze*_*sni 1 php magento magento2

我有一条路线可以构建有效负载并将其提交到其他站点,

像这样

[
  ...
  'hash' => 'MD5_HASH_FOR_THIS_PAYLOAD' 

]
Run Code Online (Sandbox Code Playgroud)

但问题是当我访问此路由时,magento 第二次缓存数据,magento 发送旧有效负载的请求,

execute我在控制器的方法中尝试了以下代码

 <?php 
 $cacheManager = $objectManager->get('\Magento\Framework\App\Cache\Manager');
 $types = array('full_page');
 $cacheManager->flush($types);
Run Code Online (Sandbox Code Playgroud)

但对我没有用。

编辑

我没有此页面的 xml 布局,只有一个由控制器创建的块

 $block = $this->_view->getLayout()->createBlock('Vendor\Module\Block\MyBlock');
 $block->setCacheable(false);
Run Code Online (Sandbox Code Playgroud)

有人可以帮我如何从 FPC 中排除这条路线吗?

oli*_*mer 6

我想您的特定页面有带有模板和块的布局吗?

Magento 的页面缓存使用的是块信息。如果一个页面只有可缓存的块,那么magento将认为该页面可以被缓存。

cacheable="false"只需在需要动态的页面块的布局中添加 即可。清空缓存并让 magento 完成剩下的工作。

所以你的布局中的块应该是这样的:

<block class="..." name="my_custom_block" as="custom" template="..." cacheable="false"/>
Run Code Online (Sandbox Code Playgroud)

如果您不使用布局而是动态创建块,那么您可以在 _construct 方法中简单地设置块上的cache_lifetime:

protected function _construct()
{
    parent::_construct();
    $this->addData(array('cache_lifetime' => null));
}
Run Code Online (Sandbox Code Playgroud)

我不认为直接在控制器中动态创建块是一个好的做法。