View不加载JSON

时间:2017-12-01 19:47:00

标签: json symfony twig

我正在使用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,它就可以工作。但我需要从该变量中提取内容。任何的想法?有谁可以帮助我?

2 个答案:

答案 0 :(得分:0)

我解决了更改控制器中收到的字符串的问题。当我从MongoDB中检索文档时(我不知道为什么)附带一个额外的双 [] 。然后,拖放面板无法识别JSON格式...

要解决,首先我在控制器中删除它们,其次我在视图中生成JSON,如下所示:

dropzones: {
                    "A": [ {{ contenido|raw }} ]
           }

这就是全部,它对我有用。

答案 1 :(得分:0)

使用此:

dropzones = {{ contenido|json_encode|raw }};