You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Smarty遇'unrecognized tag 'extends''语法错误求助

解决Smarty中"unrecognized tag 'extends'"语法错误的方案

嘿,我来帮你排查这个问题——遇到unrecognized tag 'extends'这个错误,大概率是版本或者写法的问题,咱们一步步来解决:

首先排查Smarty版本

{extends}和{block}这两个模板继承标签是Smarty 3及以上版本才引入的,如果你的项目用的是Smarty 2.x,那肯定会报这个错,因为Smarty 2根本不支持这个语法。

你可以在PHP代码里加一行打印版本的代码,确认一下:

require ("../../libs/Smarty/Smarty.class.php");
echo Smarty::SMARTY_VERSION; // 打印当前Smarty版本
$smarty = new Smarty();
// ... 其他配置

如果输出是2.x的话,有两个选择:

  • 升级到Smarty 3或4(推荐,毕竟新版本功能更全,维护也更好)
  • 改用Smarty 2的模板复用方式,比如用{include}标签嵌套模板,替代继承逻辑

如果是Smarty 3+版本,检查模板写法

如果版本没问题,那大概率是模板的写法不符合要求:

  1. {extends}必须放在模板的最开头:模板文件里不能有任何内容(包括空格、换行、HTML注释)在{extends}标签前面,比如你的chefsquad_rice.tpl应该是这样的:
{extends file="default_shirts.tpl"}
{block name="chicken"}
<!-- 这里写你要填充到父模板的内容 -->
{/block}

要是前面有空格或者其他字符,Smarty会识别不了extends标签。

  1. 确认父模板路径正确:虽然错误提示是标签不识别,但有时候路径错误也可能导致奇怪的问题。你可以试试用绝对路径指定父模板,比如:
{extends file="../../templates/default_shirts.tpl"}

或者确保default_shirts.tpl确实在你设置的template_dir(也就是../../templates)目录下。

最后检查安全配置(概率较低)

如果你的Smarty开启了安全模式($smarty->security = true;),那可能是extends标签被禁用了。可以在配置里添加允许的标签:

$smarty->security = true;
$smarty->security_settings['allowed_tags'][] = 'extends';
$smarty->security_settings['allowed_tags'][] = 'block';

按照上面的步骤排查,应该就能解决这个问题了。

内容的提问来源于stack exchange,提问作者Richard D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:05:15