我想重用一个选择菜单,但每次在Twig中更改id和它的名称。怎么可能呢?
我想到了一个关于选择菜单的包装块,然后每次重用时都会扩展它。但是如何使用{{ parent() }}
设置id和name的值?
答案 0 :(得分:1)
我通过在自定义Twig_Extension
课程中存储和创建密钥来实现此目的,这是一个小设置。通过保持全局,我可以确保每个视图/宏/包括...
example.twig
{% for i in 1..5 %}
<ul id="{{ get_unique_key('my_menu') }}">
<li>Foo</li>
</ul>
{% endfor %}
ProjectTwigExtension
class ProjectTwigExtension extends Twig_Extension {
private $keys = array();
public function getFunctions() {
return array(
new Twig_SimpleFunction('get_unique_key', array($this, 'getUniqueKey')),
);
}
/**
* Create an unique HTML identifier
*
* @param $name String to make unique
*
* @returns String
*/
public function getUniqueKey($name) {
if (!in_array($name, $this->keys)) {
$this->keys[] = $name;
return $name;
}
$i = 0;
while(in_array($name.++$i,$this->keys)) {}
$this->keys[] = $name.$i;
return $name.$i;
}
public function getName() {
return 'ProjectTwigExtension';
}
}
注册扩展名
$twig = new Twig_Environment($loader);
$twig->addExtension(new ProjectTwigExtension());