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

Drupal站点AJAX请求返回PHP代码被注释无法执行渲染如何解决

问题根因说明
  • Drupal 默认的文本输入过滤机制会拦截、转义或注释掉内容字段中的PHP代码,避免恶意代码执行,你看到的PHP代码被包裹在<!-- -->注释中就是该机制处理后的结果。
  • 即使在Twig中使用|raw过滤器也只会原样输出文本,不会触发PHP代码解析执行。你尝试的processed_text渲染方式未生效,大概率是当前Body字段使用的文本格式未开启PHP执行权限。
解决方案

注意:直接在Node Body等内容字段中编写可执行PHP代码属于极高危操作,仅建议在完全受控的测试环境中使用,生产环境优先选择以下更安全的合规方案。

方案1(生产环境推荐,无安全风险):自定义AJAX回调接口

该方案完全不需要将PHP代码写入Node Body,符合Drupal开发规范:

  1. 新建自定义Drupal模块,在模块的*.routing.yml文件中定义专属AJAX路由,示例配置:
your_module.ajax_callback:
  path: '/api/custom-ajax'
  defaults:
    _controller: '\Drupal\your_module\Controller\CustomAjaxController::handlePost'
    _format: json
  requirements:
    _permission: 'access content' # 可根据业务需求调整权限控制规则
  1. 在模块的src/Controller/CustomAjaxController.php文件中编写你的PHP业务逻辑,处理前端POST请求并返回对应结果。
  2. 前端jQuery直接请求你定义的/api/custom-ajax路由获取返回值即可。

方案2(次推荐):动态插入PHP执行结果

如果你需要在Node详情页渲染PHP逻辑的运行结果,不要将PHP代码写入Body字段,通过Drupal钩子动态插入内容:

  • 实现hook_node_view_alter()钩子,在钩子中执行你的PHP逻辑,将运行结果插入到Node的渲染数组中,Twig模板正常渲染Body字段即可。

方案3(仅限测试环境使用):开启PHP过滤器

如果你一定要在Node Body中直接编写并执行PHP代码,按以下步骤操作:

  1. 安装Drupal官方贡献的PHP Filter模块(Drupal 8及以上版本核心默认不自带该模块)。
  2. 进入后台「配置」-「内容创作」-「文本格式和编辑器」,找到Body字段使用的文本格式,开启「PHP代码过滤器」。注意:该文本格式的使用权限仅可开放给超级管理员,绝对不要给普通用户、匿名用户开放,否则站点存在极大被入侵风险。
  3. 保留你使用的processed_text渲染代码即可触发PHP代码执行:
{% set body = {
    '#type':   'processed_text',
    '#text':    node.body.value,
    '#format':  node.body.format,
} %}
{{ body }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:45:03