Twig 2.12.5中是否有PHP __LINE__的等效实现?
在Twig 2.12.5中实现类似PHP __LINE__的功能
Twig 2.x没有原生提供和PHP __LINE__完全等效的内置功能,但可以通过两种方式实现行号输出,满足你调试嵌套代码的需求:
方法1:自定义Twig扩展(推荐)
你可以创建一个简单的Twig扩展,添加一个返回当前模板行号的函数:
class DebugExtension extends \Twig\Extension\AbstractExtension { public function getFunctions() { return [ new \Twig\TwigFunction('line', [$this, 'getCurrentLine']), ]; } public function getCurrentLine(\Twig\Environment $env) { $template = $env->getTemplateClass(); $lineno = $env->getTemplate($template)->getTemplateLine(); return $lineno; } }
注册这个扩展后,就能在模板里直接调用{{ line() }}输出当前行号,比如:
<script> console.log('当前Twig模板行号:{{ line() }}'); </script>
方法2:利用Twig的source函数(临时调试用)
如果不想写扩展,可以用source函数获取当前模板内容,结合字符串分割来估算行号(注意:这种方法在模板有包含、继承时可能不准确,仅适合简单场景):
{% set line_count = 0 %} {% for _ in source(_self)|split('\n') %} {% set line_count = line_count + 1 %} {% if loop.index == _self.getTemplateLine() %} {% set current_line = line_count %} {% endif %} {% endfor %} <script> console.log('当前行号:{{ current_line }}'); </script>
注意:第二种方法依赖模板编译时的行号映射,在包含宏、继承结构的复杂模板中可能出现偏差,优先推荐第一种自定义扩展的方式。
内容的提问来源于stack exchange,提问作者user2342558
相关产品推荐
相关产品推荐

