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
相关产品推荐
相关产品推荐

