为什么此函数不返回值?- Symfony2



在控制器的操作中,我经常根据id从数据库中的表中选择一行,所以我将其分离为一个函数。但每次执行此操作时,我都会检查查询是否返回了某些内容,因此我也想将其与函数分离。这是我的代码:

该功能在控制器中,由我的控制器扩展,其中包括以下操作:

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部分,但不会呈现模板错误。html.twig:(但如果我选择这个部分

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

init()函数中取出,并在调用$this->init($id)后将其放入displayAction($id)中,即可工作。但我不想把它写在控制器的每一个动作中。有什么想法可以将其分离以避免代码重复吗?

您不会返回init函数的响应。这就是为什么它会向您显示错误消息。你必须在displayAction():中做类似的事情

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

相关内容

  • 没有找到相关文章

最新更新