我想将一些数据传递给 JavaScript ,但我得到了这样的空变量
var testsCompany = {}; var testparams =“[{}]”;
这是与 doctrine 中的延迟数据加载相关的一些问题,我试图更改 ManyToOne 关联中的 fetch 属性值但是徒劳无功 .
这是我的代码:
<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 回答
最后我有一个解决方案:
composer需要jms / serializer-bundle
安装软件包后,只需将软件包添加到AppKernel.php文件中:
new JMS\SerializerBundle\JMSSerializerBundle(),
var testsCompany = {%autoescape%} {{testsCompany | serialize | raw}} {%endautoescape%};
var testParams = {%autoescape%} {{testParams | serialize | raw}} {%endautoescape%};
</ SCRIPT>