0

我在从渲染控制器方法调用的控制器中获取对象时遇到问题。

这是我的具有自我 OneToOne 关系的实体:

class Family
{

/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\OneToOne(targetEntity="Family")
 * @ORM\JoinColumn(name="brother_id", referencedColumnName="id")
 **/
private $brother;

/**
 * @ORM\Column(type="string", length=100)
 */
private $label;
}

这是我的行动:

/**
 * @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" }

请帮我。

4

2 回答 2

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

于 2013-06-18T15:44:41.643 回答
0

谢谢cheesemacfly

确实,它与@ParamConverter 一起使用

但这很奇怪,因为如果我删除 OneToOne 关系,它就可以在没有 @ParamConverter 的情况下工作

于 2013-06-19T07:38:54.517 回答