2015-07-03 2 views
1

У меня есть php-фрагмент в Symfony2, где я говорю: Если пользователь существует -> вернуть эти наборы данных в массив к шаблону else -> return name => 'user not found'. Ниже приведен единственный способ, которым это может работать, если я использую в своей ветке только переменную «first_name».Как TWIG выполняется, если условия?

Устранение неполадок Объяснение: Если пользователь не существует в базе данных, я не могу позвонить user.name, user.username, user.password. Даже если условие if не выполняется, веточка все еще пытается оценить это внутреннее утверждение.

То, что я хочу сказать:

if (user) { 

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

} 

else { 
User not found 
} 

Однако, если пользователь не найден, он все равно будет пытаться выполнить доступ БД из переменной пользователя ... 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'); 
    } 
} 

TWIG

{% if exists == true %} 

    Hello {{ first_name }}! 

{% else %} 

    Sorry, that user does not exist! 

{% endif %} 
+0

Ваш вопрос непонятен, может добавить несколько подробностей, специфичных для вашей проблемы? –

+0

обновлено описание проблемы – rern

+0

Попробуйте сделать var_dump ($ user); die; 'прямо перед тем, как вы выполните' if ($ user) {'в контроллере. Вы можете видеть, какое значение у него есть. Скорее всего, это объект. – MiltoxBeyond

ответ

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 %} 

Более того, если вы запрашиваете базу данных с паролем, это означает, что вы сохранили пароль очистки. Это очень плохая практика.

Смежные вопросы