TWIG如何执行if条件语句


How TWIG executes if conditionals?

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

明确问题说明:如果数据库中不存在用户,我就不能调用user.name、user.username、user.password。即使不满足If条件,trick仍然会尝试评估内部语句。

我想说的是:

if (user) {
{{ user.name }}<br>
{{ user.username }}<br>
{{ user.password }} <br>
 }
else {
User not found
}

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

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

树枝

{% if exists == true %}
    Hello {{ first_name }}!
{% else %}
    Sorry, that user does not exist!
{% endif %}

为什么不简单地在模板中注入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 %}

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