¿Hay alguna manera de llamar a una función estática o usar una variable estática en twig?motor de plantillas twig, usando una función estática o variable
Tengo una clase de funciones estáticas de ayuda y quiero usar una o dos en una plantilla.
¿Hay alguna manera de llamar a una función estática o usar una variable estática en twig?motor de plantillas twig, usando una función estática o variable
Tengo una clase de funciones estáticas de ayuda y quiero usar una o dos en una plantilla.
Maneras de pareja en las que terminé haciéndolo.
La primera es una función que puede llamar a una función estática.
$twig = new Twig_Environment($loader);
$twig->addFunction('staticCall', new Twig_Function_Function('staticCall'));
function staticCall($class, $function, $args = array())
{
if (class_exists($class) && method_exists($class, $function))
return call_user_func_array(array($class, $function), $args);
return null;
}
puede entonces ser utilizado como,
{{ staticCall('myClass', 'mymethod', [optional params]) }}
La otra es utilizar un método mágico.
Añadir a la clase que el contexto $ rendir
$data['TwigRef'] = new TheClass();
class TheClass
{
public function __call($name, $arguments) {
return call_user_func_array(array('TheClass', $name), $arguments);
}
...
}
puede entonces ser utilizado como,
{{ TwigRef.myMethod(optional params) }}
Probablemente la mejor manera de añadir algunos controles extra para funciones sólo aprobados, llame al ser llamados.
He visto esto antes. Aún no he visto una ubicación para ello. Por favor, en un proyecto de SF2, ¿dónde se supone que debe ir este código? ¿Dónde se define $ loader? –
¿Cómo hacer que esta primera solución funcione cuando pasa el nombre completo de clase con su espacio de nombres? – slob
Bueno uno. Supongo que esto no debe estar en un proyecto de Symphony 2 –
Puede agregar dinámicamente funciones a sus plantillas de rama registrándolas. Ya sea que ya son exigibles o alias de su función estática por un nombre que es propia:
$twig = new Twig_Environment($loader);
$twig->addFunction('functionName', new Twig_Function_Function('someFunction'));
Véase el Functions section in Extending Twig.
Creo que tendré que hacer mi propia función para poder usar las estáticas. algo así como static ('clase', 'función', [params]) – Alex
Probablemente no, intente registrar ''clase :: función'' como el parámetro'' someFunction'' anterior y hágame saber si funciona o no. – hakre
Ese es mi problema, eso podría funcionar, pero luego tendría que hacerlo para cada función que pueda necesitar. – Alex
¿Qué desea lograr? ¿Solo pasa variables u ofrece una función propia para usar en plantillas? – hakre
Tengo una clase de funciones auxiliares estáticas así que esperaba poder llamarlas de alguna manera sin la necesidad de agregarlas usando addFunction. – Alex
Creo que, además, esta es una respuesta interesante también para usted: [función twig-pass en plantilla] (http://stackoverflow.com/questions/3595727/twig-pass-function-into-template/3595941#3595941) – hakre