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

Slim Framework 4控制器响应GET请求返回Formr表单无输出如何解决

问题原因

Formr\Formr类的create_form()方法默认行为是直接输出HTML内容而非返回HTML字符串,调用该方法时产生的表单内容已经被输出到缓冲区,而方法本身的返回值为空,因此你将方法返回值写入Slim的Response对象时,相当于写入了空内容,最终响应自然没有输出。
你取消注释加die()能看到内容,是因为调用create_form()时直接输出了表单HTML,之后die()终止了程序,不会执行Slim后续的响应处理逻辑,所以直接输出的内容能正常展示。

解决方法

有两种可行的解决方式:

方式1:配置Formr返回HTML字符串(推荐)

Formr支持配置为不直接输出、而是返回HTML字符串,你可以在实例化Formr时传入配置参数开启该特性:

$form = new Formr\Formr('', '', '', ['return' => true]);

修改后你原有写入Response的代码即可正常生效,$form->create_form('Name')会直接返回表单HTML字符串。

方式2:通过输出缓冲捕获内容

如果不想修改Formr的实例化配置,也可以用PHP原生输出缓冲函数捕获create_form()输出的内容,再写入Response:

$app->group('/timer', function (Group $group) {
    $group->get('/', function (Request $request, Response $response) {
        $form = new Formr\Formr();
        // 开启输出缓冲
        ob_start();
        $form->create_form('Name');
        // 获取缓冲区内容并清空缓冲区
        $formHtml = ob_get_clean();

        $response->getBody()->write($formHtml);
        return $response;
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:36:04