Intereting Posts
Создание модулей внутри модуля в CodeIgniter Как скопировать файл на PHP без перезаписи существующего файла? Есть ли способ, чтобы подклассы PHP наследовали свойства (как статические, так и экземпляры)? Как найти слово, которому предшествует другое конкретное слово? проблемы с профилями страницы в системе, которые всегда отображают, что пользователь является владельцем профиля, который является неправильным Странный таймаут с PHP cURL и SSL PHP-форма для MySQL-Array в MySQL-проблема PHP curl_setopt () CURLOPT_PROGRESSFUNCTION Каковы магические кавычки во время выполнения PHP? как использовать Single Sign On для входа пользователя в cpanel? Ошибка входа в систему с помощью tank_auth (библиотека аутентификации codeigniter) Переменные сеанса после перенаправления заголовка CREATE TABLE, если NOT EXISTS терпит неудачу, таблица уже существует PHP: функции обратного вызова Подписанная строка php openssl не проверяется Win CryptoAPI

Использование Twig для генерации JSON

Я хочу иметь URL-адрес, который возвращает простой объект JSON. Я пытаюсь использовать Twig для создания объекта JSON:

{ "urls": [ {% for child in page.root %} "{{ child.url }}"{% if not loop.last %},{% endif %} {% endfor %} ] } 

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

 {'urls':['../ants/','../brick-report/','../the-pollution-intervention/','../barclay/','../broken-advertising/','../aldat-n-densom/','../thisisart/','../there-she-goes-again/']} 

который JQuery не будет анализировать с помощью методов ajax или getJSON. Это полностью игнорирует этот JSON. Как я могу убедить Twig поставить правильные пробелы? Я просмотрел инструкцию, и мне кажется, что это НЕ касается вставки пробелов.

Это работает для меня (шаблон ветки):

 var parsedJSON = JSON.parse('{{ ['one', 'two', 'three']|json_encode|e('js') }}'); 

И что:

 console.log(parsedJSON); 

выведет:

  Array ["one", "two", "three"] 

в консоли FF.

Не используйте Twig для генерации вашего json-ответа.

В вашем контроллере используйте:

 return new Response(json_encode($var)); 

Образец:

 public function sampleAction() { $urls = array('../test', '../something', '../sample'); return new Response(json_encode($var)); } 

Если URL-адреса генерируются из маршрутов Symfony2, вы можете использовать:

 public function sampleAction() { $urls = array( $this->generateUrl('my_test'), $this->generateUrl('my_something'), $this->generateUrl('my_sample'), ); return new Response(json_encode($var)); } 

Для этого у Twig есть фильтр.

json_encode , он использует функцию PHP json_encode.

для вашего дела:

 {{ {'urls': page.root}|json_encode }} 

выйдет

 {"urls":["..\/ants\/","..\/brick-report\/","..\/the-pollution-intervention\/","..\/barclay\/","..\/broken-advertising\/","..\/aldat-n-densom\/","..\/thisisart\/","..\/there-she-goes-again\/"]} 

код проверен и работает. Для получения дополнительной информации взгляните на документацию Twig для json_encode .

Это легко, если вы расширяете веточку.

Во-первых, создайте класс, который будет содержать расширение:

 <?php namespace Acme\DemoBundle\Twig\Extension; use Symfony\Component\DependencyInjection\ContainerInterface; use \Twig_Extension; class VarsExtension extends Twig_Extension { protected $container; public function __construct(ContainerInterface $container) { $this->container = $container; } public function getName() { return 'some.extension'; } public function getFilters() { return array( 'json_decode' => new \Twig_Filter_Method($this, 'jsonDecode'), ); } public function jsonDecode($str) { return json_decode($str); } } 

В принципе метод $ .getJson () требует json, но ther является строкой, поэтому вы можете использовать $ .get () для получения ответа и использовать синтаксический анализатор для анализа строки в JSON

  $.get("ffff",function(data){ // user parser JSON.parse(); });