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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:17:37