twig
Ramita extensible
Buscar..
Observaciones
Twig ya tiene algunos filtros y funciones incorporados , pero ¿qué sucede si faltan las funciones integradas o si tiene que acceder a algunas funciones predeterminadas de PHP
en una plantilla?
Agregar filtros / funciones personalizados
Aquí hay algunos ejemplos de cómo agregar nuevos filtros / funciones a la twig
,
el synax para agregar Twig_Function
s es el mismo que Twig_Filter
, solo cambia las palabras clave en consecuencia
<?php
$twig = new Twig_Environment($loader);
/* You can chain a global function */
$twig->addFilter(new Twig_SimpleFilter('floor', 'floor'));
/* You can specify a custom function */
$twig->addFilter(new Twig_SimpleFilter('money', function($value, $currency, $prefix = false, $decimals = 2, $dec_point = "." , $thousands_sep = ",") {
$value = number_format($value, $decimals, $dec_point, $thousands_sep);
if ($prefix) return $currency.' '.$value;
return $value.' '.$prefix;
});
/* You can chain an object's method */
$twig->addFilter(new Twig_SimpleFilter('foo_bar', array($foo, 'bar')));
Creando una extensión de Twig
Puede agrupar todas sus funciones / filtros / pruebas personalizadas ... dentro de una clase Twig_Extension
personalizada:
ProyectoTwigExtension
class ProjectTwigExtension extends Twig_Extension {
public function getFunctions() {
return array(
new Twig_SimpleFunction('twig_function_name', array($this, 'getTwigFunctionName')),
new Twig_SimpleFunction('twig_function_foo', array($this, 'getTwigFunctionFoo')),
);
}
public function getFilters() {
return array(
new Twig_SimpleFilter('twig_filter_name' , array($this, 'getTwigFilterName')),
new Twig_SimpleFilter('twig_filter_foo' , array($this, 'getTwigFilterFoo')),
);
}
public function getName() {
return 'ProjectTwigExtension';
}
}
Registrar extensión en ramita
$twig = new Twig_Environment($loader);
$twig->addExtension(new ProjectTwigExtension());
Más opciones se pueden encontrar en los documentos oficiales.
Fecha de nacimiento simple para filtrar por edad
Cómo ...
1 - usa la clase de extensión de ramita que se extiende
use \Twig_Extension
class dobToAge extends \Twig_Extension {
2 - Agregue el filtro apropiado anulando el método getFilters ()
public function getFilters() {
return array(
'age' => new \Twig_Filter_Method($this, 'getAge'),
);
}
3 - Agregue un poco de lógica para obtener la edad de una Fecha de nacimiento determinada
public function getAge($date)
{
if (!$date instanceof \DateTime) {
// turn $date into a valid \DateTime object or let return
return null;
}
$referenceDate = date('01-01-Y');
$referenceDateTimeObject = new \DateTime($referenceDate);
$diff = $referenceDateTimeObject->diff($date);
return $diff->y;
}
}
Entonces, llame a su filtro de la siguiente manera,
{{ yourDateOfBirthInstance | age }}