Symfony:设置时Cookie不在模板中

时间:2018-05-15 12:43:59

标签: php symfony

我在同一个请求中的控制器中遇到cookie的问题我没有立即在模板中使用它。

然而,当我重装时,它会出现。

控制器

        $response = $this->render(':frontend/homepage:homepage.html.twig');

        $now = new \DateTime();

        $response->headers->setCookie
        (
            new Cookie
            (
                'affiliateTracker',
                serialize
                (
                    array
                    (
                        'name' => 'John Doe'
                    )
                ),
                $now->modify('+24 hours'), '/'
            )
        );

        $response->sendHeaders();

        return $response;

模板

 {% if app.request.cookies.get('affiliateTracker') %}
                            <div class="alert text-center alert-success">
                                <i class="fa fa-user"></i> <strong>Your Name:</strong> {{ app.request.cookies.get('affiliateTracker').name }}
                            </div>
                        {% endif %}

1 个答案:

答案 0 :(得分:0)

您不能立即获取Cookie,因为它是在answer中写的。 其中一个解决方案是使用javascript在客户端获取它:

<script>
  function getCookie(cname) {
    var name = cname + "=";
    var decodedCookie = decodeURIComponent(document.cookie);
    var ca = decodedCookie.split(';');
    for(var i = 0; i <ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}
if(getCookie('affiliateTracker') !== ""){
document.write( '<div class="alert text-center alert-success"><i class="fa fa-user"></i> <strong>Your Name:</strong>'+getCookie('affiliateTracker')+'</div>' );
}
</script>