来自Twig的cookie的布尔值

时间:2013-09-03 13:48:08

标签: symfony cookies boolean twig

当我的网站启动时,我有一个简单的js脚本,可以检测网站是否在高分辨率设备上查看,然后将值保存到cookie中。

{% if app.request.cookies.has('d_p_r') %}
    {% set retina = app.request.cookies.get('d_p_r') %}
{% else %}
    {% set retina = false %}
    <script> ... </script>
{% endif %}

我检查我的视网膜值已设置为在我的网站中的某处输出{{retina}},并且它在我的计算机上返回'false',在我的iPad上返回'true'。到目前为止,非常好。

问题是当我尝试访问布尔值时。

{% if retina == true %}
    <img alt="{{ alt }}" src="{{ ('img/' ~ img)|imagine_filter(filter) }}">
{% else %}
    {% if big is defined %}
    <img  alt="{{ alt }}" src="{{ asset('img/' ~ img) }}">
    {% else %}
    <img alt="{{ alt }}" src="{{ ('img/' ~ img)|imagine_filter(filter ~ '@2x') }}">
    {% endif %}
{% endif %}

{%if retina == true%}无法正常工作。如果我将其更改为== false,我会在任何地方生成视网膜图片。尽管{{retina}}的值返回false,但它似乎总是返回true。

我不知道我在这里做错了什么。我尝试只做{%if retina%},但这没有帮助。我还清除了所有尝试解决此问题的缓存。

1 个答案:

答案 0 :(得分:3)

问题是retina是一个字符串 - 不是布尔值。 Cookie只是字符串,不支持类型。 $nonEmtpyString == true始终为true。因此,您可以改为retina == 'true'

但是如果你想在模板中使用布尔值,你可以这样做:

{% set retina = app.request.cookies.get('d_p_r') == 'true' ? true : false %}