我在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访问。如何解决此问题?
/**
* @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 %}
答案 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 %}
此外,如果您使用密码查询数据库,则表示您已存储了清除密码。这是非常糟糕的做法。