【问题标题】:How do I correctly check for a cookie in Symfony2?如何在 Symfony2 中正确检查 cookie?
【发布时间】:2013-10-29 22:42:06
【问题描述】:

我正在尝试在我的视图中使用 twig 注释来检测是否设置了某个 cookie 值,但我对 twig 不是很熟悉,它目前无法正常工作。

首先,我在控制器中设置了 cookie,我可以从我的浏览器中看到它存在。这是相关的PHP代码:

if (isset($_GET['accept-cookie'])) {
    setcookie("acceptCookies", "true", time() + (86400 * 300));
}

在我的浏览器中,我可以查看 cookie 并确认内容已正确设置为 true。

现在,在我看来,我需要检查 cookie 是否存在,如果不存在,则应显示 cookie 横幅。代码如下:

{% if app.request.cookies.get("acceptCookies") != null %}
    <h1>Cookies are set!</h1>
{% else %}
    <div id="cookieBanner">
        <div id="cookieContainer">
            <p>We use cookies on this website. By using this website, we'll assume that you consent to <a href="/cookies">the cookies we set.</a></p>
            <a href="?accept-cookie" class="button">Okay, continue.</a>
        </div>
    </div>
{% endif %}

根据我已阅读的文档,这应该可以正常工作,但是,即使我可以看到浏览器存在于我的浏览器中,它也会继续显示 cookie 横幅。

我应该如何解决这个问题?

【问题讨论】:

    标签: php symfony cookies twig


    【解决方案1】:

    在您的 php 中,检查您的 html 树枝代码中不存在的 $_GET['accept_cookie'] 值。这就是浏览器显示 cookie 横幅的原因。您必须使用表格填写$_GET['accept_cookie']

    【讨论】:

    • 对不起,我很困惑。为什么 $_GET 需要出现在我的树枝代码中? cookie 是在控制器中设置的,从我所看到的情况来看,它的功能很好。只有在设置后才读取 cookie,这就是问题所在。
    【解决方案2】:

    我认为这是在 twig 模板中访问 c​​ookie 的最佳方式!

    这个变量包含你所有的cookies

    {% app.request.cookies %}

    例子:

    {% if app.request.cookies.has('acceptCookies') %} Yes you accept cookies {% endif %}

    查看完整教程:http://enarion.net/news/2012/access-cookies-in-a-twig-template-using-symfony2/

    还可以查看有关如何正确设置 cookie 的 symfony 文档:http://symfony.com/doc/current/components/http_foundation/introduction.html#setting-cookies

    【讨论】:

    • 谢谢,我同意这看起来是正确的做法。这是我在研究如何检查 twig 中的 cookie 时检查的教程之一。不幸的是,像您建议的那样使用 app.request.cookies.has 也不起作用。我怀疑我可能正在处理更大的问题......
    • 我用一个关于如何设置 cookie 的额外示例编辑了我的答案(请参阅最后一个链接)
    • 谢谢。这可能是一个愚蠢的问题,但是如果在不考虑 symfony 方法的情况下设置了 cookie,twig 会以不同的方式读取 cookie 吗?我正在处理的站点实际上并没有使用 symfony2,但它是自己的自定义 MVC,也使用了 twig 注释。我曾尝试联系该网站的原始创建者,但不幸的是,他无法确定我哪里出错了。
    • 澄清一下:据我所知,自定义 MVC 是 Symfony2 的修改版本。但我也从未真正处理过 Symfony,所以我可能错了。
    • 不知道使用基于 symfony2 的 mvc 是否会改变 twig 中的行为,但是你可以使用 symfony2 的方式在你的框架中设置 cookie 吗?如果是这样,那就试试吧
    猜你喜欢
    • 2013-07-05
    • 2017-06-09
    • 2023-03-02
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 2015-02-25
    相关资源
    最近更新 更多