【发布时间】:2014-03-21 04:46:09
【问题描述】:
例如,如果我们将一个表格对象传递给 twig 视图,我们如何才能获得该对象的类名,如“表格”。
class Table{
}
$table = new Table();
在树枝中:
{{ table.className }} ---> 这应该显示“表格”
【问题讨论】:
例如,如果我们将一个表格对象传递给 twig 视图,我们如何才能获得该对象的类名,如“表格”。
class Table{
}
$table = new Table();
在树枝中:
{{ table.className }} ---> 这应该显示“表格”
【问题讨论】:
如果您不想像这样在实体上将此方法设为:
public function getClassName()
{
return (new \ReflectionClass($this))->getShortName();
}
然后你可以创建一个 Twig 函数或过滤器。这是一个函数:
class ClassTwigExtension extends \Twig_Extension
{
public function getFunctions()
{
return array(
'class' => new \Twig_SimpleFunction('class', array($this, 'getClass'))
);
}
public function getName()
{
return 'class_twig_extension';
}
public function getClass($object)
{
return (new \ReflectionClass($object))->getShortName();
}
}
这样使用:
{{ class(table) }}
【讨论】:
getShortName只返回没有命名空间的类名。使用 getName 函数获取类的 FQN(即命名空间和名称)。
在 \Twig_Extension 你可以添加测试
public function getTests()
{
return [
'instanceof' => new \Twig_Function_Method($this, 'isInstanceof')
];
}
/**
* @param $var
* @param $instance
* @return bool
*/
public function isInstanceof($var, $instance) {
return $var instanceof $instance;
}
然后用like
{% if value is instanceof('DateTime') %}
【讨论】:
nurikabe 回答的略微更新版本:
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class ClassTwigExtension extends AbstractExtension
{
public function getFunctions()
{
return [
new TwigFunction('get_class', 'get_class'),
];
}
public function getName()
{
return 'class_twig_extension';
}
}
这样使用:
{{ get_class(table) }}
【讨论】: