2013-10-21 23 views
4

我想在我的视图中使用树枝注释来检测是否已经设置了某个cookie值,但是我对树枝不是很熟悉,它目前没有工作。如何正确检查Symfony2中的cookie?

首先,我已在控制器中的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的旗帜,即使我可以看到浏览器出现在我的浏览器。

我应该如何办法解决这个?

回答

0

在你的PHP,你检查$_GET['accept_cookie']值不要在您的HTML代码树枝存在。这就是浏览器显示cookie横幅的原因。您必须使用表格取$_GET['accept_cookie']

+0

你如何获得'$ _GET ['accept_cookie']'值? – david

+0

对不起,我很困惑。为什么$ _GET需要出现在我的树枝代码中? cookie被设置在控制器中,并且从我所能看到的功能中运行良好。一旦设置了问题,它只会读取cookie。 – jessenorton

6

我觉得这是访问一个树枝模板Cookie中的最佳途径!

这个变量包含所有的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/

而且采取一个看起来symfony的文档如何以正确的方式设置Cookie:http://symfony.com/doc/current/components/http_foundation/introduction.html#setting-cookies

+0

谢谢,我同意看起来像正确的方式来做到这一点。这是我在研究如何检查树枝上的饼干时检查的教程之一。不幸的是,使用app.request.cookies.has像你所建议的那样也不起作用。我怀疑我可能正在处理更大的问题... – jessenorton

+0

我编辑我的答案与如何设置cookie的另一个例子(见最后一个链接) – acrobat

+0

谢谢。这可能是一个愚蠢的问题,但是如果在不考虑symfony的方法的情况下设置cookie,它会不同地读取cookie?我正在处理的网站实际上并没有使用symfony2,但是它自己的自定义MVC也使用了twig注释。我曾尝试联系该网站的原创者,但他不能确定我出错的地方不幸。 – jessenorton