[top-think/think]匹配Template文件名错误,版本V5.1.28

2023-12-18 93 views
6

开发环境nginx 1.4 + PHP7.0 我的view/report/income.html内写了如下js代码: var start_time = $("input[name='start']").val(); var end_time = $("input[name='end']").val(); 在控制器对应的income方法中return view();时得到报错如下:

模板文件不存在:C:\Users\Administrator\Desktop\project\application\admin\view\start.html

经过排查发现 在Think\Template.php第576行的正则匹配后出现错误: if (preg_match($regex, $template, $matches)) 这一句执行之后的结果 $matches['name']就变成start了;

我修改view/report/income.html的代码如下后运行OK: var start_time = $("#start").val(); var end_time = $("#end").val();

所以,建议优化一下正则。

附问题html ,问题代码at the line 131~132.

income.zip

回答

7

能否说明下 $("input[name='start']").val()$("#start").val() 获得的值分别是什么吗?

0

$("input[name='start']").val() 与 $("#start").val() 获得的值是空的,这是一个搜索栏的开始时间和结束时间bootstrap input,应该跟它获取的值无关;问题在于当view\html文件的js代码中出现:var start_time = $("input[name='start']").val();时显示报错如下,我排查到的原因是Think\Template.php第576行的正则匹配。。。假如把js代码换成var start_time = $("#start").val();则不会有问题。你可以下载附件income.zip,里面的html放在view里面就会报错哦。。

7

哦!复现出来了,我确定这是个bug。我得想想怎么来修复它。谢谢反馈。

6

简化下复现的方式,模板文件设置为:

<script>
var buttons = {extend: 'copy'};
var start_time = $('input[name="start"]').val();
var end = {};
</script>

会被解析为该模板继承自 start

3

用{literal}包起来最好是

9

嗯,这是规避问题的一个方法。

4

但不代表这个问题吧。当出现这种问题,开发者自己也不好排查啊。