2012-09-14 51 views
-1

在我的控制器的操作中,我经常通过它的id从数据库中的表中选择一行,所以我将它分隔为一个函数。但是每当我这样做时,我都会检查查询是否返回了某些内容,所以我想将它与函数分开。这里是我的代码:为什么这个函数不返回值? - Symfony2

此功能的控制器,这是由我的位指示延长它们是这些操作:

protected function findById($id, $class) 
{ 
    $result = $this->getEM()->getRepository('EMMyFriendsBundle:'.$class)->find($id); 
    if($result == null) { 
     return false; 
    } else { 
     return $result; 
    } 
} 

这是我的控制器:

class FriendController extends Controller 
{ 
    private $em; 
    private $friend; 

    private function init($id) 
    { 
     $this->em = $this->getEM(); 
     $this->friend = $this->findById($id, 'Friend'); 

     if(!$this->friend) { 
      return $this->render('EMMyFriendsBundle:Friend:error.html.twig', array(
       'item' => 'friend')); 
     } 
    } 

    /* 
    * Displays all the information about a concrete friend 
    */ 
    public function displayAction($id) 
    { 
     $this->init($id); 

     if($this->friend->getCategory() != null) { 
      $category = $this->friend->getCategory()->getName(); 
     } else { 
      $category = null; 
     } 

     return $this->render('EMMyFriendsBundle:Friend:friend.html.twig', array(
       'friend' => $this->friend, 'category' => $category)); 
    } 

    // ... 
} 

当我选择一个不存在的ID(如38743874)它会转到init函数中的if部分,但不会呈现模板error.html.twig :(但是,如果我拿这部分

if(!$this->friend) { 
       return $this->render('EMMyFriendsBundle:Friend:error.html.twig', array(
        'item' => 'friend')); 
      } 

init()功能,并把它在displayAction($id)刚刚打电话$this->init($id)后,它的工作原理。但我不想在控制器的每一个动作中写这个。任何想法如何将其分离以避免代码重复?

回答

2

您不会返回init函数的响应。这就是为什么它会显示错误信息。你将不得不做这样的事情在displayAction()

$response = $this->init(); 
if ($response) { 
    return $response; 
} 
+0

非常感谢您! :) – Faery