我有一些想法需要在当前项目中实施。我将在下面用一个例子来解释:
我将在许多模板中使用以下变量结构:
{% if article.tags is iterable %}
{% for tag in article.tags %}
{{ tag.title }}
{% endfor %}
{% endif %}
正如您在上面的#1 行中所看到的,然后我会将具有来自 PHP 的“标签”数据列表的“文章”变量数据分配给 Twig 模板加载器,这是常用的。但是,我不想从数据库加载“标签”数据并分配给模板,因为我认为它会使用我的服务器连接和资源,甚至使用或不使用“标签”数据。
所以我认为最好的方法是使用事件监听器(钩子)概念,在 Twig 内部实现,下面是过程:
1) 在加载模板之前,我正在我的 PHP 文件中的某个位置准备一个侦听器: $this->twig->addListenerMethod($this, 'tags');
2) 当 Twig 解析“tags”变量时,它会检查是否有一个具有相同方法名称的侦听器附加到该变量。
3) 当找到监听器时,Twig 将调用通过传递父对象(文章)作为其第一个参数指定的方法。
4)当方法调用时,它会按原样处理并返回所需的“标签”数据列表。
我的问题是:
1)我可以在哪个 Twig 源文件中开始查看和实现 Twig 中的事件侦听器(挂钩)概念?
2) 是否有人已经使用我上面描述的 Twig 进行了相同的实现?
3)或有人有一些建议?
我希望我能对此有很多建议,同时我也在研究 Twig 的源代码。
谢谢。
亲切的问候。