php - not - twig strict mode
Elemento de configuración de la matriz de Twig (8)
¿Cómo puedo configurar miembro de una matriz ya existente de Twig?
Intenté hacerlo de la siguiente manera:
{% set arr[''element''] = ''value'' %}
pero tengo el siguiente error:
"Símbolo" de token inesperado del valor "[" ("fin del bloque de instrucción" esperado) en ...
He encontrado este problema muy molesto, y mi solución es quizás ortodoxa y no está en línea con la filosofía de Twig, pero desarrollé lo siguiente:
$function = new Twig_Function(''set_element'', function ($data, $key, $value) {
// Assign value to $data[$key]
if (!is_array($data)) {
return $data;
}
$data[$key] = $value;
return $data;
});
$twig->addFunction($function);
que se puede usar de la siguiente manera:
{% set arr = set_element (arr, ''element'', ''value'')%}
He intentado la respuesta de @LivaX pero no funciona, combinando una matriz donde las teclas son numéricas no funcionará ( https://github.com/twigphp/Twig/issues/789 ).
Eso funcionará solo cuando las teclas sean cadenas
Lo que hice fue recrear otra tabla ( temp
) de la tabla inicial ( t
) y convertir las teclas en una cadena, por ejemplo:
{% for key , value in t%}
{% set temp= temp|merge({(key~''_''):value}) %}
{% endfor %}
t
teclas: 0, 1, 2 ..
teclas temp
: 0_, 1_, 2_ ....
Me encontré con este problema, pero estaba tratando de crear índices enteros en lugar de índice asociativo como ''elemento''.
Debe proteger su clave de índice con ()
usando el filtro de combinación:
{% set arr = arr|merge({ (loop.index0): ''value''}) %}
Ahora puede agregar una clave de índice personalizada como (''element''~loop.index0)
No hay una buena manera de hacer esto en Twig. Sin embargo, es posible mediante el uso del filtro de combinación:
{% set arr = arr|merge({''element'': ''value''}) %}
Si la inicialización solo necesita:
{% set items = { ''apple'': ''fruit'', ''orange'': ''fruit'', ''peugeot'': ''unknown'' } %}
Solo use esto como {% set arr={''key'':''value''} %}
(sin espacios en blanco después del '':''), funciona bien. Pero cuando utilicé ''for'' para hacer una matriz, no puede funcionar fuera del área for.
{% for group in user.groups %}
{% set foo={''loop.index0'':''group.id''} %}
{% set title={''loop.index0'':''group.title''} %}
{{ title }} //it work
{% else %}
{% set foo={''0'':''-1''} %}
{% set title={''0'':''未分组''} %}
{% endfor %}
{{ title }} //it not work, say title is not defined
Gracias por sus atenciones. (Inglés pobre, lo siento!)
Tenía una matriz de múltiples dimensiones. La única solución que pude encontrar es crear una nueva matriz temporal y actualizar / agregar la información, que luego pasó a otra función de rama.
{% set links = {} %}
{# Use our array to wrap up our links. #}
{% for item in items %}
{% set links = links|merge({ (loop.index0) : {''url'': item.content[''#url''].getUri(), ''text'': item.content[''#title'']} }) %}
{% endfor %}
{%
set linkList = {
''title'': label,
''links'': links
}
%}
{% include ''<to twig file>/link-list.twig''%}
Gracias por este hilo: también pude crear una matriz con (loop.index0) y enviarla a twig.