2013-06-18 61 views
0

我有一個問題,從render控制器方法調用的控制器中獲取對象。Symfony2錯誤渲染控制器的關係OneToOne在同一張桌子上

這是我的實體與自我OneToOne關係:

​​

這是我的行動:

/** 
* @Template() 
*/ 
public function testAction() 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $brothers = $em->getRepository('FifaAdminBundle:Family')->findAll(); 

    return array(
     'brothers' => $brothers, 
    ); 
} 

我的觀點

{% for brother in brothers %} 
    {{ brother.id }} - {{ brother.label }} 
    <hr /> 
    {% render controller('AdminBundle:Test:show', {'brother': brother}) %} 
    <hr /> 
    {{ render(controller('AdminBundle:Test:show', { 'brother': brother })) }} 
    <hr /> 
{% endfor %} 

我的其他控制器

public function showAction($brother) 
{ 
    if (is_object($brother)) 
    { 
     return new \Symfony\Component\HttpFoundation\Response('OK'); 
    } 
    else 
    { 
     var_dump($brother); 
     return new \Symfony\Component\HttpFoundation\Response('KO'); 
    } 
} 

第一個元素是好的。 但是如果它有一個brother_id,這個兄弟在showAction中不加載。

它給了我這樣的:

array(1) { ["__isInitialized__"]=> string(1) "1" } 

請幫助我。

回答

1

您可能想要在您的案例中使用@ParamConverter註釋。

你的控制器會去如下:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; 
use Admin\Bundle\Entity\Family; 

/** 
* @Route("/show/{id}") 
* @ParamConverter("family", class="AdminBundle:Family") 
*/ 
public function showAction(Family $brother) 
{ 
    //Do your stuff 
} 

和視圖:

{% for brother in brothers %} 
    {{ brother.id }} - {{ brother.label }} 
    <hr /> 
    {{ render(controller('AdminBundle:Test:show', { 'brother': brother.id })) }} 
    <hr /> 
{% endfor %} 

需要注意的是,如果沒有Family找到對象,產生404響應。所以你不需要檢查你的控制器中是否存在對象$brother

http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html

0

謝謝cheesemacfly

事實上,它的工作與@ParamConverter

但它是wird因爲如果我刪除OneToOne關係,它的工作原理沒有@ParamConverter