我正在使用Symfony 3,Angular JS和Twig。当我尝试在视图中生成JSON(html.twig)时出现问题。
我的模型(MongoDB)
{
"_id" : ObjectId("5a1feb783e06fa060c0076b2"),
"contenido" : [
[
{
"type": "item",
"name": "Foo",
"id": 5
},
{
"type": "item",
"name": "Bar",
"id": 6
}
]
]
}
我的控制器:
class Controlador extends Controller
{
// This method retrieve data (Document) from MongoDB
public function renderizar(Request $request)
{
...
$repository= $this->get('doctrine_mongodb')
->getManager()
->getRepository('AppBundle:Class');
$object = $repository->find('5a1feb783e06dfa060c0076b2');
$contenido = json_encode($object->getContenido());
$contenidoB = htmlentities($contenido);
$contenidoC = html_entity_decode($contenidoB);
$contenidoDef = json_decode($contenidoC);
return $this->render('view.html.twig', 'contenido' => $contenidoDef));
}
}
我想在视图中生成JSON(在AngularJS的控制器内部),以便从AngularJS渲染拖放面板。
我的观点
{% block body %}
<!doctype html>
<html >
<head>
<script>
angular.module("app").controller("NestedListsDemoController", function($scope)
{
$scope.models = {
dropzones: {
"A": [
{
"type": "container",
"name": "container",
"id": 4,
"columns": [
[
{
"type": "item",
"name": "Foo",
"id": 5
},
{
"type": "item",
"name": "Bar",
"id": 6
}
]
]
}
]
}
};
});
</script>
...
{% endblock %}
如果我使用包含该JSON的变量,Angular的控制器会在视图中识别JSON。
dropzones: {
...
"A": {{ contenido|raw }}
}
or
dropzones: {
...
"A": {{ contenido }}
}
但是,如果我在视图中编写JSON,它就可以工作。但我需要从该变量中提取内容。任何的想法?有谁可以帮助我?
答案 0 :(得分:0)
我解决了更改控制器中收到的字符串的问题。当我从MongoDB中检索文档时(我不知道为什么)附带一个额外的双 [] 。然后,拖放面板无法识别JSON格式...
要解决,首先我在控制器中删除它们,其次我在视图中生成JSON,如下所示:
dropzones: {
"A": [ {{ contenido|raw }} ]
}
这就是全部,它对我有用。
答案 1 :(得分:0)
使用此:
dropzones = {{ contenido|json_encode|raw }};