OpenCart中PHP转Twig模板遇语法错误及_SERVER.REQUEST_URI无效问题
PHP转OpenCart Twig模板报错修复
原PHP代码
<?php $homepage = "/"; $currentpage = $_SERVER['REQUEST_URI']; echo $_SERVER['REQUEST_URI']; if ($homepage == $currentpage) { ?> some html here <?php } else { ?> other html here <?php } ?>
转换后错误的Twig代码
{% set homepage "/" %} {% set currentpage _SERVER.REQUEST_URI %} {{ _SERVER.REQUEST_URI }} {% if homepage == currentpage %} some html here {% else %} other html here {% endif %}
报错信息
致命错误:未捕获的Twig\Error\SyntaxError:意外的字符串标记值"/"(预期为"语句块结束")。并且_SERVER.REQUEST_URI无法生效。
问题原因及修复方案
1. Twig语法错误
Twig的set语句要求变量与赋值内容之间必须用=连接,不能仅用空格。错误代码中{% set homepage "/" %}缺少=,直接触发语法报错。
2. OpenCart Twig无法直接访问_SERVER
OpenCart的Twig模板环境不会直接暴露PHP全局变量$_SERVER,必须通过控制器传递所需变量,或者使用框架预定义的模板变量。
修复后的代码示例
方案一:用OpenCart预定义的route变量判断首页
OpenCart默认会将当前页面的路由传递到模板,首页路由固定为common/home,可直接用此判断:
{% if route == 'common/home' %} some html here {% else %} other html here {% endif %}
方案二:传递REQUEST_URI到模板(需修改控制器)
如果需要严格匹配REQUEST_URI,先修改对应控制器(如catalog/controller/common/header.php),添加代码将URI传递到模板:
// 在控制器的index方法内添加 $data['current_uri'] = $this->request->server['REQUEST_URI'];
随后在Twig模板中使用:
{% set homepage = "/" %} {% set currentpage = current_uri %} {{ current_uri }} {% if homepage == currentpage %} some html here {% else %} other html here {% endif %}
内容的提问来源于stack exchange,提问作者Eduard Dimitroff
相关产品推荐
相关产品推荐

