twig函数将变量设置为undefined

时间:2014-08-13 02:54:14

标签: php symfony twig

我知道检查变量是否使用

很容易
{# defined works with variable names #}
{% if foo is defined %}
    ...
{% endif %}

并使用以下方法设置变量:

{% set foo = 'bar' %}

有没有办法将变量设置为undefined?我有一个传递给twig html文件的变量,并不总是传递,我只是遇到了可能为null的情况。当它为null时,我想将其设置为undefined,因为通过文件其余部分的逻辑语句正常工作,并且它首先定义了痛苦测试,然后每次使用此变量时再次为null。 / p>

我遇到了这个conversation,想知道是否有其他人有解决方案要么取消设置变量,要么更好的方法来设置一个可以是未定义或null的变量。

更新了代码: 我在我的后端管理部分工作。出于各种原因,我没有使用SonataAdmin并希望建立自己的。在这个区域,我可以查看所有用户的摘要,在某些页面中,我可以查看和编辑用户个人资料的各个部分。我有一个标题twig文件,其中包含指向摘要页面的链接,然后是另一行包含指向用户配置文件部分的链接。

对于我的路由admin_profile_show - 我需要包含用户来加载正确的页面,但是如果用户在这里为空,这将导致错误,因为它无法访问用户名属性。

{% if user is defined %}
    {{ path('admin_profile_show', { 'username': user.username}) }}
    ...other routes and links
{% endif %}

我想我的真正问题是我允许用户名可以为null的情况,因此它已定义,但为null。在我更改其他文件的逻辑之前,我想知道是否存在可以如下工作的未设置变量:

{% if user is null %}
    {% unset user %}
{% endif %}

1 个答案:

答案 0 :(得分:0)

正如上面提到的F21,在模板中模拟数据并不是一个好习惯,但如果你真的想要这样做,你可以简单地扩展Twig来完成这项工作(我的意思是你可以通过{{3}创建你自己的功能}),这是一个简单的例子:

class STWebExtension extends \Twig_Extension
{

    /**
     * @return array|\Twig_SimpleFunction
     */
    public function getFunctions()
    {
        return [
            new \Twig_SimpleFunction('array_keys', [$this, 'array_keys']),
        ];
    }

    /**
     * @param array $input
     * @param null $search_value
     * @param null $strict
     * @return array
     */
    public function array_keys(array $input, $search_value = null, $strict = null)
    {
        return array_keys($input, $search_value, $strict); //here we are simply returning PHP's built-in array_keys function.
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'st_web_extension';
    }
}