我在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 %}
此外,如果您使用密码查询数据库,则意味着您已经存储了清除密码。这是非常糟糕的做法。