2014-11-21 4 views
2

у меня есть две простые функции внутри моего контроллера:Symfony 2 Вызов функции (с temlate визуализации) в контроллере

public function indexAction(){ 

    $userid = $this->getUser()->getId(); 

    $userdata = $this->getDoctrine() 
      ->getRepository('LiveupUserBundle:userData') 
      ->findOneById($userid); 

    $userfriends = $this->getDoctrine() 
      ->getRepository('LiveupUserBundle:userFriends') 
      ->findByUser($userid); 
    return $this->render('LiveupMainBundle:Main:profile.html.twig', array(
     'userdata' => $userdata, 
     'userfriends' => $userfriends 
    )); 
} 

и

public function peopleAction($nick){ 
    if($nick){ 

     $frienddata = $this->getDoctrine() 
       ->getRepository('LiveupUserBundle:userData') 
       ->findOneByNick($nick); 

     if($frienddata->getId() === $this->getUser()->getId()) 
     { 
      self::indexAction(); 
     }else{ 
      $friendfriends = $this->getDoctrine() 
        ->getRepository('LiveupUserBundle:userFriends') 
        ->findByUser($frienddata->getId()); 

      return $this->render('LiveupMainBundle:Main:people_profile.html.twig', array(
       'frienddata' => $frienddata, 
       'friendfriends' => $friendfriends 
      )); 
     } 
    } 
} 

Проблема заключается в том, когда, если оператор во второй функции верно , Я хочу выполнить indexAction и визуализировать шаблон из этой функции (profile.html.twig), но я не получаю ошибку ответа. Может кто-нибудь мне помочь? Спасибо заранее.

ответ

1

Я думаю, что вы ищете forwarding a request. Из документов, вы можете сделать что-то вроде этого:

public function peopleAction($nick){ 
    if($nick){ 

     $frienddata = $this->getDoctrine() 
      ->getRepository('LiveupUserBundle:userData') 
      ->findOneByNick($nick); 

     if($frienddata->getId() === $this->getUser()->getId()) 
     { 
      $response = $this->forward('AppBundle:Something:index', array(
       'var1' => $anyVar //if you need to forward a param 
      )); 
     }else{ 
      $friendfriends = $this->getDoctrine() 
       ->getRepository('LiveupUserBundle:userFriends') 
       ->findByUser($frienddata->getId()); 

      $response = $this->render('LiveupMainBundle:Main:people_profile.html.twig', array(
       'frienddata' => $frienddata, 
       'friendfriends' => $friendfriends 
      )); 
     } 

     return $response; 
    } 
} 

Кроме того, глядя на ваш код, вы все равно получите ошибку, если ваша $nick переменная принимает значение false, потому что никакого ответа не будет возвращен. Вы должны убедиться, что вы ВСЕГДА возвращаете ответ от контроллера.

Еще одна вещь, о которой стоит подумать, может быть, перенаправление будет отвечать вашим потребностям. посмотрите на the docs, чтобы посмотреть, как это сделать, это довольно просто с контроллера.

+0

, пожалуйста, это факт наличия одного «возврата» вместо двух в конце вашего действия - это то, что называется «рефакторинг» в программировании? спасибо за решение, так или иначе, очень интересно –

0

Вы забыли return заявление:

return self::indexAction(); 

Кроме того, если nick может быть пустым, вы должны обработать этот случай и бросить исключение или вернуть ответ.

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