在ESI组件中登录缓存页面会重定向到/_internal/secure/.../none.html

时间:2012-08-05 11:20:17

标签: symfony varnish esi

我刚刚设置了清漆,并且在切换到生产之前我已经在端口8080上完成了一些测试。

我注意到如果我在缓存页面上:

/**
 * @Cache(smaxage="10800")
 * @Route("/{_locale}/", name="homepage2", requirements={"_locale" = "en|fr"})
 * @Template()
 */
public function indexAction()
{
    return array();
}

我尝试通过ESI

中包含的组件登录(不使用外部服务,但使用正常登录)
    {% render "GamerCertifiedHomeBundle:Home:login" with {}, { 'standalone': true } %}

它最终会将我重定向到没有样式且没有网址的网页...:8080/_internal/secure/MyBundleHomeBundle:Home:login/none.html

Step1 Screenshot / Step2 Screenshot

如果我回到主页,我已登录。

我该如何避免这种情况?

编辑:

1 个答案:

答案 0 :(得分:1)

the chat中分析问题后,我发现_target_path安全成功重定向是以下一种方式在表单中生成的:

<input type="hidden" name="_target_path" value="{{ app.request.uri }}" />

由于这部​​分是使用独立视图呈现的 - 它具有特定的uri(带有_internal前缀)。

您可以通过为app.request.uri注射应用更改的逻辑来避免这种情况。

  1. 将其传递给控制器​​:

    {% render yourAction with {'uri': app.request.uri}, {'standalone': true} %}
    
  2. 在您的控制器中将其传递给您的视图

    public function yourAction ($uri)
    {
        ...
        return array('uri' => $uri);
    }
    
  3. 在模板中使用

  4. Enjoiy! ;)