Доктрина Symfony LAZY Загрузка данных - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу передать некоторые данные в JavaScript , но я получил пустые переменные, подобные этому

var testsCompany = {};

var testparams = "[{}]";

Это некоторая проблема, связанная с отложенной загрузкой данных в доктрине , я пытался изменить значение атрибута 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 Ответ

0 голосов
/ 07 ноября 2018

Наконец-то у меня есть решение:

  1. Я установил сериализатор :

    композитор требует jms / serializer-bundle

  2. настроить его:

После того, как вы установили пакет, вам просто нужно добавить пакет в файл AppKernel.php:

new JMS\SerializerBundle\JMSSerializerBundle(),

  1. и объедините веточку помощников:
 <script type="text/javascript">
 var testsCompany = {% autoescape %}{{ testsCompany|serialize|raw }}{% endautoescape %};
 var testParams =  {% autoescape %}{{  testParams|serialize|raw }}{% endautoescape %};
 </script>
...