【问题标题】:TYPO3 plugin without caching没有缓存的 TYPO3 插件
【发布时间】:2016-11-23 10:13:25
【问题描述】:

我用 Extbase/Fluid 写了一个扩展,这个扩展有一个插件:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    'MyVendor.' . $_EXTKEY,
    'Pi1',
    array(
        'MyController' => 'list'
    ),
    // non-cacheable actions
    array(
        'MyController' => 'list'
    )
);

但是在创建链接时

<f:link.action arguments="{foo: 'bar'}">...</f:link.action>

生成的 url 有一个 cHash 参数:

http://localhost/mypage/?tx_myext_pi1[foo]=bar&cHash=d1768a40d9370f7a8d327043da156a05

为什么?我将这个插件定义为“不缓存”,所以应该没有 cHash 参数。

TYPO3 版本是 7.6.12。

【问题讨论】:

  • 你想达到什么目的?为什么要停用插件中的缓存(出于性能原因不推荐)以及为什么要摆脱 cHash?如果您在问题中陈述目标,可能会给出更好的答案。
  • 我想摆脱 cHash。我现在明白了,为什么需要它以及如何摆脱它(使用站点配置使 url 说话)。我知道未缓存插件的缺点,但通常它们是必要且有用的。

标签: caching typo3 fluid extbase


【解决方案1】:

cHash参数不是用来缓存你的内容,而是用来缓存url中的参数,所以它与action本身是否被缓存无关。

如果您的操作被缓存并且您在更改模板或代码时没有看到任何更改,那么可能是您更改了操作的缓存设置并且 localconf 仍然被缓存。在这种情况下,您必须在安装工具中清除系统缓存或卸载并安装您的扩展。

【讨论】:

    【解决方案2】:

    要删除 cHash 参数,您可以使用 f:link ViewHelper 参数 noCacheHash

    <f:link.action arguments="{foo: 'bar'}" noCacheHash="true">...</f:link.action>
    

    cHash 不仅仅用于你的插件。同样对于您页面的其余部分(布局等),如果您有参数,TYPO3 始终设置一个 cHash。

    如果您使用 RealURL,如果您已映射 url 中的所有参数,则 cHash 将消失。

    【讨论】:

    • 问题不仅仅是cHash,如果不想缓存插件内容。我知道“noCacheHash”,但我不想使用它,我想以正确的方式做/我希望 Extbase/Fluid 以正确的方式做。而且我不能使用“noCacheHash”对我的插件内容(f:widget.paginate)进行分页,所以这些链接也有 cHash 参数。
    • 为什么“noCacheHash”应该是一种“错误”的方式?如果设置了 url 中的参数,则行为是始终添加一个 cHash。在您的分页模板中,您还可以设置“noCacheHash”参数。当然:如果您使用扩展来制作“更好的 url”,您可以通过正确映射所有参数来删除 cHash。如果您没有“漂亮的网址”,那么一个或多个参数无关紧要,或者?
    • 我查看了 uri 构建器的源代码,所以我可以说:如果未设置“noCacheHash”并且将参数添加到 url,则始终添加 cHash。所以不管你是否使用不可缓存的动作。
    • 您写道“如果您使用扩展来制作“更好的 url”,您可以通过正确映射所有参数来删除 cHash”:cHash 参数仍在使用中,并且页面被缓存。您写道:“如果您没有“漂亮的 url”,那么一个或多个参数无关紧要,或者?当然重要的是,页面内容被缓存了,在某些情况下,这有很多缺点。
    • 如果您的 url 中有参数,则始终设置 cHash 参数。 cHash 不能确定你的插件是否被缓存或者不是。如果您使用不可缓存的操作并且插件被缓存,这是另一个问题。
    【解决方案3】:

    这里存在一些误解,现有答案中的一些信息已经过时。

    除了查看权威资源,例如TYPO3 更改日志或 Benni Mack 核心负责人的博客文章,我建议查看适用于您的 TYPO3 版本的资源 - 有些事情已经改变:例如停用 cHash 的参数不再起作用,并且从 v9 开始,您在 TYPO3 中的路由有更多可能性。

    资源:


    我的建议:缓存所有内容,除非有充分的理由不这样做。此外,还有一些方法可以仅在必要时进行自动缓存刷新,例如查看新闻扩展:

    News 有一个内置机制,负责在处理 News 记录后清除缓存。

    https://docs.typo3.org/p/georgringer/news/7.2/en-us/AdministratorManual/BestPractice/ClearCache/Index.html

    以前需要通过 Page TSConfig 进行配置,以在编辑新闻记录后强制刷新。现在有更好的方法来做这些事情。使用最佳做法和最新信息。


    引用问题:

    我用 Extbase/Fluid 编写了一个扩展,这个扩展有一个插件: // 不可缓存的动作 大批( '我的控制器' => '列表' ) ); 但是在创建链接时 ... 结果 url 有一个 cHash 参数: 为什么?我将这个插件定义为“不缓存”,所以应该没有 cHash 参数。

    插件未缓存,但页面未缓存。您可以缓存页面,但将单个插件设置为未缓存。 “页面缓存”从缓存中加载,插件在每个页面请求时呈现(如果配置为未缓存)。

    此外,过去可以使用 noCacheHash 停用 cHash,但这已被弃用并删除:

    除此之外:不建议停用页面缓存,您可以通过路由配置“隐藏”cHash,参见上述资源。

    【讨论】:

      猜你喜欢
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多