2011-01-22 4 views
2

Я создал новую строку JSON (путем преобразования PHP массив, используя json_encode) и хранить его в $siteTree ... выводит его в журнал показывает следующееВызов JavaScript функции из Symfony компонента

[ 
{ 
    "attr": { 
     "id": "node_1", 
     "rel": "folder" 
    }, 
    "data": "New Title", 
    "children": [ 
     { 
      "attr": { 
       "id": "node_2", 
       "rel": "folder" 
      }, 
      "data": "second document", 
      "children": [] 
     } 
    ] 
} 

]

Итак, я знаю, что JSON сформирован правильно. То, что я пытаюсь сделать, это использовать этот переменный в яваскрипте функции для создания объекта, используя данные JSON ... Я делаю следующее в шаблоне

<?php 
    use_helper('JavascriptBase'); 
    echo javascript_tag('createTree('.$siteTree.')'); 
?> 

отображаются на странице вывода следующего

createTree([{&quot;attr&quot;:{&quot;id&quot;:&quot;node_1&quot;,&quot;rel&quot;:&quot;folder&quot;},&quot;data&quot;:&quot;New Title&quot;,&quot;children&quot;:[{&quot;attr&quot;:{&quot;id&quot;:&quot;node_2&quot;,&quot;rel&quot;:&quot;folder&quot;},&quot;data&quot;:&quot;second document&quot;,&quot;children&quot;:[]}]}]) 

Функция вызывается, но JSON заменил " на &quote;. Как я могу остановить это?

Благодарим за помощь!

+0

Не могли бы вы показать нам 'javascript_tag()?' –

+0

Его встроенная функция symfony – ManseUK

+0

@DrMolle: Это функция symfony: http://trac.symfony-project.org/browser /branches/1.4/lib/helper/JavascriptBaseHelper.php –

ответ

0

ОК .. Мне удалось решить проблему ... вот как я это сделал ... Я забыл про json_encode и просто передал массив до шаблона компонента.

В шаблоне я обработал его, как этот

echo javascript_tag('createTree('.json_encode($siteTree->getRawValue()).');'); 

это, то вывод правильный JavaScript.

Спасибо за помощь всем! Есть ли в итоге

2

Symfony автоматически выполняет выходное экранирование, чтобы предотвратить несколько типов атак XSS.

Вы можете отключить его конфигурации, или в зависимости от того, какой вариант структуры Symfony вы используете, доступ к необработанным данным, на ваш взгляд, как это:

$sf_data->getRaw('siteTree') 

например

echo javascript_tag('createTree(' . $sf_data->getRaw('siteTree') . ')'); 

Если это не работает для вас, вы должны найти соответствующие ссылки нужно, ознакомившись с документацией Symfony для вашей версии базы, поиск «маскирование».

+0

Теперь я получаю -> Примечание: Неопределенный индекс: [{"attr": {"id": "node_1", "rel": "folder"}, data ":" New Title "," children ": [{" attr ": {" id ":" node_2 "," rel ":" folder "}," data ":" второй документ "," children ": [ ]}]}] – ManseUK

+0

Учитывая, что я не дал вам никакого кода, который обращается к массиву, я думаю, вам нужно будет уточнить, откуда эта ошибка. –

+0

Переменная $ siteTree содержит первый раздел кода в моем сообщении выше. Это было результатом выполнения Json_encode в массиве – ManseUK

Смежные вопросы