Symfony Doctrine LAZY 数据加载

Symfony Doctrine LAZY Data loading

我想将一些数据传递给 JavaScript 但我得到了这样的空变量

var testsCompany = {};

var testparams = "[{}]";

doctrine 中延迟数据加载的一些问题,我尝试更改 fetch 属性值 ManyToOne 关联但徒劳。

这是我的代码:

  <script type="text/javascript">
    var testsCompany = "{{ testsCompany|json_encode()|raw}}";
    var testparams = "{{ testparams|json_encode()|raw}}";
  </script>

这是我的实体:

class TestParams
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * Many testparams have One test.
     * @ORM\ManyToOne(targetEntity="Tests", inversedBy="testparams",fetch="EAGER")
     * @ORM\JoinColumn(name="test_id", referencedColumnName="id")
     */
    private $test;


    /**
     * Many testparams have One param.
     * @ORM\ManyToOne(targetEntity="Params", inversedBy="testparams", fetch="EAGER")
     * @ORM\JoinColumn(name="param_id", referencedColumnName="id")
     */
    private $param;

    /**
     * @var bool
     *
     * @ORM\Column(name="required", type="boolean")
     */
    private $required;

    public function __construct()
    {
        $this->test = new ArrayCollection();
        $this->param = new ArrayCollection();
    }

    public function __toString()
    {
        return '*';
    }

}

这是控制器代码:

/**
     * @Route("/generate/{id}", name="prestashoptest_db_generate")
     */
    public function generateAction(Request $request)
    {
        $testId = $request->get('id');
        $testRepo = $this->getDoctrine()->getRepository('PrestaShopTestBundle:Tests');
        $testParamsRepo = $this->getDoctrine()->getRepository('PrestaShopTestBundle:TestParams');
        $testParams = $testParamsRepo->findBy(array("test" => $testId));
        $testsCompany = $testRepo->find($testId);

        return $this->render('PrestaShopTestBundle:BOTest:generate.html.twig',
            array(
                "testsCompany" => $testsCompany,
                "testParams" => $testParams,
            )
        );
    }

终于有了解决办法:

  1. 我安装了一个序列化器:

    作曲家要求 jms/serializer-bundle

  2. 配置它:

安装包后,只需将包添加到 AppKernel.php 文件:

new JMS\SerializerBundle\JMSSerializerBundle(),

  1. 并合并 twig 助手:
 <script type="text/javascript">
 var testsCompany = {% autoescape %}{{ testsCompany|serialize|raw }}{% endautoescape %};
 var testParams =  {% autoescape %}{{  testParams|serialize|raw }}{% endautoescape %};
 </script>