如果条件限制,TWIG如何执行?

时间:2015-07-03 20:21:34

标签: php symfony twig

我在Symfony2中有一个php片段,我说: 如果用户存在 - >将数组中的这些数据集返回给模板 别的 - > return name => '用户未找到'。如果我在我的树枝中只有变量' first_name'以下是唯一可行的方法。被使用。

明确问题说明: 如果用户不存在于数据库中,则无法调用user.name,user.username,user.password。即使if条件不满足,twig仍会尝试评估内部语句。

我想说的是:

if (user) {

{{ user.name }}<br>
{{ user.username }}<br>
{{ user.password }} <br>

 }

else {
User not found
}

但是,如果找不到用户,它仍会尝试从变量user ... user.name ..等执行DB访问。如何解决此问题?

PHP代码段

    /**
     * @Route("/login/{username2}/{password2}")
     * @Template()
     */
    public function indexAction($username2, $password2)
    {
        $em = $this->getDoctrine()->getEntityManager();
        $respository = $em->getRepository("SchachteUserBundle:user");

        $username = $username2;
        $password = $password2;
        $user = $respository->findOneBy(array("username"=>$username, "password"=>$password));

        if ($user) {
            return array('exists'=>true, 'first_name' => $user->getName(), 'username' => $user->getUserName(), 'password'=>$user->getPassword());
        }

        return array('exists'=>false, 'first_name' => 'USER NOT FOUND', 'username' => 'USER NOT FOUND', 'password'=>'USER NOT FOUND');
    }
}

TWIG

{% if exists == true %}

    Hello {{ first_name }}!

{% else %}

    Sorry, that user does not exist!

{% endif %}

1 个答案:

答案 0 :(得分:2)

为什么不简单地在模板中注入findOneBy的返回值:

$user = $respository->findOneBy(array("username"=>$username, "password"=>$password));
return array('user'=>user);

然后在模板中

{% if user %}
    {{ user.name }}<br>
    {{ user.username }}<br>
    {{ user.password }}
{% else %}
    User not found
{% endif %}

此外,如果您使用密码查询数据库,则表示您已存储了清除密码。这是非常糟糕的做法。