Получение данных из многомерных массивов (массива рендеринга) в веточке

У меня есть массив рендеринга для формы в моем модуле D7, который выглядит так:

'form' => 
  array
    '#id' => string 'demo-form' (length=9)
    '#action' => string '/sprint07/' (length=10)
    'name' => 
      array
        '#title' => string 'Username' (length=8)
        '#maxlength' => int 13
        '#size' => int 15
        '#type' => string 'textfield' (length=9)
        '#required' => boolean true
        '#input' => boolean true
        '#autocomplete_path' => boolean false
   ... snip ...

Я использую twig-for-drupal для создания темы, но я не могу вернуть значения обратно, я пробовал {{form ['name'] [' #type ']}} , {{form.name. # type}} , {{form.name [' # type ']}} и и так далее, но все они возвращаются в прошлое.

Other fields such as form['#action'] works fine, so how should I access the information more than one array in? I can't change the module too much as the PHP template in its native state uses render(form);

-- Обновить --

Добавлена ​​еще одна отладка для этого и кажется, что я могу использовать {{form | dump ('v')}} , чтобы показать мне весь массив, как указано выше, но когда я делаю {{ form.name | dump ('v')}} Я просто получаю строку, которая, как я полагаю, означает, что веточка автоматически обнаруживает свой массив рендеринга и «помогает» преобразовать его для меня .. Поэтому я предполагаю, что задает мой вопрос: как отключить авто-рендеринг?

2
добавлено отредактировано
Просмотры: 1
de

2 ответы

В подвале «name» не содержится ключ «#id».

попробуйте, если работа

{{ form.name.#title }} 
1
добавлено
id был плохим примером, у меня такая же проблема и для ключей, которые существуют.
добавлено автор CaffeinatedDave, источник

Оказывается, в настоящее время это невозможно сделать в каждом конкретном случае, TFD в настоящее время настроен на автоматическое рендеринг всего, что, по его мнению, является массивом рендеринга, и чтобы отключить его, вам нужно установить autorender в FALSE в twig_get_instance() . Я сам это пробовал, но все же кажется, что он превращает массив в строку, так что это может быть ошибкой в ​​TFD, или я просто не понимаю использования, которое в равной степени, если не больше, вероятно.

Из песочница ReneB :

<�Р> Autorender </р>      

В этой версии движка TWIG используется автоматический рендеринг, чтобы помешать им получить RSI от ввода {{node.field_somefield | render}} для каждого отдельного поля, которое они хотят отобразить из массива рендеринга (doom), чтобы можно было безопасно ввести { {node.field_something}} </р>      

При рендеринге скомпилированного шаблона TFD проверьте, является ли вызываемая переменная строкой, вызываемой или массив. Если это строка, она просто делает echo $ string, если она вызываемая, возвращает правильный метод() для нее. И если это массив, он предполагает, что это рендерируемый массив и сопоставляет его с рендером ($ string); метод drupal.

     

Таким образом, объекты, скрытые с помощью hide (), соблюдаются.

     

Чтобы включить это сейчас, вы должны установить autorender в FALSE в twig_get_instance() методе twig.engine.

     

Я работаю над блочной структурой {% noautorender%} {% end noautorender%}.

0
добавлено