从 Ajax 到 Twig 的输出对象

Mar*_*ius 2 ajax jquery symfony twig

在 Symfony 3 中我有一个排序,我使用 ajax 从后端获取对象。

\n\n

这是在控制器中:

\n\n
if($request->getMethod() === \'POST\' && isset($_POST[\'sort\'])) {\n  if($_POST[\'sort\'] === \'title_up\') {\n     $products = $em->createQuery("SELECT a FROM AppBundle:Product a ORDER BY a.title ASC")->getArrayResult();\n... etc.\n  }\n}\n\nreturn new JsonResponse($products);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在前端获取对象:

\n\n
$(\'#form_select\').on(\'change\', function()\xe2\x80\x8a {\n  var path = "{{ \'/\' }}";\n  var optionSelected = $("option:selected", this);\n  console.log(path);\n  var valueSelected = this.value;\n  if($.trim(valueSelected) != \'\')\n   {\n   /*$(\'#items\').text(data);*/\n   $.post(path, {sort : valueSelected}, function(data) {\n     console.log(\'dump\', data[0].title);\n     for(var i = 0; i < data.length; i++) {\n       $(\'#items\').append(data[i].title)\n       }\n     })\n   }\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是:有没有比使用循环和添加 data[i].description、data[i].title ...等更好的方法来渲染对象?

\n\n

我正在使用 twig,如果我可以将变量数据传递给 twig 来创建我需要的视图,那就太好了。(就像我渲染从控制器传递到树枝的任何其他变量一样)

\n

E.K*_*.K. 5

Twig 是 PHP 的模板引擎,因此它是服务器端的。这意味着您无法将某些内容从前端(JS)直接传递到 Twig。

但是您仍然可以在控制器中渲染树枝模板并在 ajax 调用中返回并粘贴到您的前端中您想要的位置

return new JsonResponse([
    'html' => $this->renderView('your_twig_file.html.twig', ['products' => $products])
]
);
Run Code Online (Sandbox Code Playgroud)