symfony 将变量设置为未定义的分支函数

f0brbegy  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(137)

我知道检查变量是否使用

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

如果未定义变量,则使用以下命令设置变量:

{% set foo = 'bar' %}

有没有办法把这个变量设置为undefined?我有一个变量被传递到一个twig html文件中,它并不总是被传递,我只是遇到了一个可能为空的情况。当它为空时,我想把它设置为undefined,因为文件的其余部分的逻辑语句都能正常工作,这是一个痛苦的测试,首先定义,然后在每次使用该变量时再次返回null。
我遇到了这个conversation,想知道是否还有其他人有一个解决方案,要么取消设置变量,要么有一个更好的方法来设置一个可以是未定义或空的变量。
更新代码:我正在我的后台管理部分工作。由于各种原因,我没有使用SonataAdmin,并希望建立自己的。在这个区域,我可以查看所有用户的摘要,在一些页面,我可以查看和编辑用户的个人资料的一部分。我有一个标题小枝文件,其中包含链接到摘要页面,然后另一行包含链接到用户的个人资料部分。
对于我的路由admin_profile_show -我需要包含用户来加载正确的页面,但是如果用户在这里为空,这将导致错误,因为它无法到达username属性。

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

我想我真实的的问题是,我允许用户名可以为空的情况,所以它被定义,但为空。在我改变其他文件的逻辑之前,我想知道是否有一个unset变量,它的工作方式如下:

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

c9x0cxw01#

正如上面提到的F21,在模板中修改数据不是一个好的做法,但如果你真的想这样做,你可以简单地扩展Twig来完成这项工作(我的意思是你可以通过extending it创建自己的函数),下面是一个简单的例子:

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';
    }
}

相关问题