1

ワニスに動的メニューを別の状態でキャッシュさせるにはどうすればよいですか?

私の現在のプロジェクト (Symfony 2.8 に基づく) では、KnpMenuBundleと ニスを使用してページをキャッシュしています。ESIまた、一部のページで 1 つの特定の要素のキャッシュを無効にするためにも利用されます。その中のメニューです。しかし、これはそれほど変化する要素ではないため、メニューのさまざまな状態をキャッシュして、現在メニューを呼び出しているページに関連する状態を渡すことができるかどうか疑問に思っていました。

関連する主なファイルは次のとおりです。

main.html.twig

{{ render_esi(controller('AppBundle:Menu:mainESI')) }}

AppBundle\Controller\MenuController.php

    public function mainESIAction($path = null)
    {
        return $this->render('menu/main_menu_esi.html.twig', [
            'path' => $path
        ]);
    }

menu/main_menu_esi.html.twig

    {{ knp_menu_render('main-menu', {'template':'menu/main_menu.html.twig'}) }}
4

3 に答える 3

2

Symfony についてはよくわかりませんが、一般的に、Cookie から必要な状態を取得できる場合は、次のシナリオを試すことができます。

recv() で:

  • Cookie ヘッダーを解析し、状態をカスタム リクエスト HTTP ヘッダーに抽出します。たとえば、「X-Menu-Mode: admin」とします。
  • すべてのクッキーをドロップ

ハッシュ()で:

  • そのヘッダーをハッシュに追加します(デフォルトでURLとホストがあります)

miss/pass (3.x) または backend_fetch (4.x):

  • X-Menu-Mode から bereq の Cookie ヘッダーを再構築します
  • bereq から X-Menu-Mode を削除

私はこのシナリオを使用して大成功を収めました。ESI に含まれるフラグメントが完全にキャッシュ可能になり、異なるバージョンがそれぞれの一意の Cookie 値に提供されます。

于 2016-08-02T17:21:23.783 に答える
1

できません。

Varnish の場合、URL は同じになるため、同じようにレンダリングされます。

ロジックを外部に適用し、パラメーターをルートに追加します。

{% if is_granted('ROLE_ADMIN') %}
    {% set menu_mode = 'admin' %}
{% else %}
    {% set menu_mode = 'normal' %}
{% endif %}

{{ render_ssi(controller('AppBundle:Menu:mainESI',{'menu_mode':menu_mode}))  }}
于 2016-07-27T15:17:50.067 に答える