2013-12-06 2 views
2

Можно ли получить объект из twig массива зная, что индекс является javascript переменнойSymfony массив доступ 2 веточки Javascript индекс

Mycontroller

public function showContactModalAction($iduser, $profil) { 
    $em = $this->getDoctrine()->getEntityManager(); 
    $contacts = $em->getRepository("LeymaxContactBundle:User")->findBy(array('accesslevel' => 'arch')); 

    return $this->render('LeymaxContactBundle:Default:contactModal.html.twig', array('contacts' => $contacts)); 
} 

MyTwig

$(".fils_zone_livre").on('click', function() { 
     var index=3; 
     var contacts = '{{contacts[index]}}'; 

    }); 

и я попытался также:

var contactArray = '{{contacts|json_encode}}'; 

, но я получаю эту réponse:

[{},{},{},{},{},{}] 

как пустой массив

+1

Кажется, что вы ищете сериализатор объектов вместо 'json_encode'. Что относительно [** jms/serializer **] (https://github.com/schmittjoh/serializer)? – Touki

ответ

0
$(".fils_zone_livre").on('click', function() { 
    var index=3; 
    var contactsArray = {{ contacts|e('js') }}; 
    var contacts = contactsArray[index]; 
}); 

Это должно работать. Twig анализирует шаблон на сервере, прежде чем выполняется javascript, поэтому он не может знать о переменных js.

+0

спасибо за ваш ответ, я попробую, но я получаю эту ошибку Twig_Error_Runtime: при рендеринге шаблона было выбрано исключение («Обратите внимание: массив для преобразования строк в C: \ wamp \ www \ LeymaxWeb \ app \ cache \ dev \ twig \ f9 \ f1 \ dcbafef3211e582ab150327ba1c59cbf3008c51290dd41d694c2b2ec9717.php line 245 ") в LeymaxContactBundle: По умолчанию: contactModal.html.twig в строке 179. – user2784013

+0

var' contacts' должен быть закодирован JSON. Вы можете использовать [json_encode] (http://php.net/json_encode) – undefined

1

Вы можете использовать JMSSerializerBundle для сериализации сущностей вместо json_encode.

var contactsArray = JSON.parse("{{ contacts|serialize('json') }}"); 
var contact = contactsArray[index]; 
1

Просто нужно почти то же, что и вы.

Но вместо

var contactArray = '{{contacts|json_encode}}'; 

вы должны использовать

var contactArray = '{{contacts|json_encode|raw}}'; 

Надеются, что это помогает.

Hennes

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