PHP,MVC:试图重定向但控制器发送输出?
我使用了一种通用的方法来定制MVC模式 控制器/动作/参数 $controller->action($param) 我如何实现重定向方法,即使用header(),因为总有来自主控制器的初始输出,但我不是有意输出任何内容PHP,MVC:试图重定向但控制器发送输出?,php,model-view-controller,Php,Model View Controller,我使用了一种通用的方法来定制MVC模式 控制器/动作/参数 $controller->action($param) 我如何实现重定向方法,即使用header(),因为总有来自主控制器的初始输出,但我不是有意输出任何内容 对使用流行的框架不感兴趣,我也不想重新发明轮子,只是想学习。您可以启用输出缓冲来存储初始输出,并在header函数之后刷新它 ob_start(); echo "output"; header("Location: other.php"); ob_end_flush(); 或者
对使用流行的框架不感兴趣,我也不想重新发明轮子,只是想学习。您可以启用输出缓冲来存储初始输出,并在header函数之后刷新它
ob_start();
echo "output";
header("Location: other.php");
ob_end_flush();
或者,您可以使用javascript重定向:
echo '<script type="text/javascript">window.location='.$url.'</script>';
echo'window.location='.$url';
编辑:
在编写类时,有一种常见的情况,您不小心在关闭?>
标记后留下了一个空格,可能是它导致了输出
为避免此类事故,只需省略关闭
?>
,这是完全合法的,除非您的文件中只有php。您可以启用输出缓冲来存储初始输出,并在头函数之后刷新它
ob_start();
echo "output";
header("Location: other.php");
ob_end_flush();
或者,您可以使用javascript重定向:
echo '<script type="text/javascript">window.location='.$url.'</script>';
echo'window.location='.$url';
编辑:
在编写类时,有一种常见的情况,您不小心在关闭?>
标记后留下了一个空格,可能是它导致了输出
为避免此类事故,只需省略关闭
?>
,这是完全合法的,除非您的文件中只有php。一种方法是使用ob\u start函数缓冲所有输出。在重定向函数中,可以使用标题
另一种方法是为html重定向发送元标记。一种方法是使用ob_start函数缓冲所有输出。在重定向函数中,可以使用标题
另一种方法是为html重定向发送一个元标记。我不会重定向,这是不必要的,而且可能很耗时(更多的请求、对服务器的响应) 我将使用index.php(作为主控制器)处理对服务器的任何请求,然后调用请求的控制器操作,然后调用视图来呈现请求的视图,最后主控制器将呈现的视图发送给客户端 通过这种方式,您可以将index.php用作主控制器或主应用程序,并集中您需要的任何内容(segurity、缓存、调试、日志) 为了让索引控制器处理每个请求,可以使用mod_rewrite 这是我为MVC所做的一种方法,也许这有助于您理解流程(这不是唯一的方法,请查看维基百科或参考资料) 主控制器:捕获请求,并使用请求数据调用相应的控制器(POST/GET) 控制器:执行相关操作,调用模型检索数据,并将输出数据发送到视图,从视图获取输出并将其发送回主控制器 模型:从数据库获取数据并对其进行操作
查看:使用布局、模板和传入数据来构建html输出我不会重定向,这是不必要的,而且可能很耗时(更多的请求、对服务器的响应) 我将使用index.php(作为主控制器)处理对服务器的任何请求,然后调用请求的控制器操作,然后调用视图来呈现请求的视图,最后主控制器将呈现的视图发送给客户端 通过这种方式,您可以将index.php用作主控制器或主应用程序,并集中您需要的任何内容(segurity、缓存、调试、日志) 为了让索引控制器处理每个请求,可以使用mod_rewrite 这是我为MVC所做的一种方法,也许这有助于您理解流程(这不是唯一的方法,请查看维基百科或参考资料) 主控制器:捕获请求,并使用请求数据调用相应的控制器(POST/GET) 控制器:执行相关操作,调用模型检索数据,并将输出数据发送到视图,从视图获取输出并将其发送回主控制器 模型:从数据库获取数据并对其进行操作
查看:使用布局、模板和传入数据构建html输出问题是什么?如何将控制器放入重定向方法?两者都不是,问题在标题中,但无论如何谢谢。只是出于兴趣,为什么控制器会输出任何东西?这就是Jon,我不是专家,但看不到输出来自何处。我同意,控制器不应该输出任何东西,也不应该重定向,除非特殊情况。问题是什么?如何将控制器放入重定向方法中?两者都不是,问题在标题中,但无论如何还是要感谢。只是出于兴趣,为什么控制器会输出任何东西?仅此而已Jon,我不是专家,但看不到输出来自何处。我同意,控制器不应该输出任何内容,也不应该重定向,除非特殊情况我不会从主控制器输出任何内容,只是将视图渲染的输出作为“最后”操作进行回显。要显示的内容必须由视图生成/处理。感谢您的努力,Feida,但这与我已经使用的方法基本相同,只是似乎是主控制器的一些输出,而不是导致重定向问题的原因。主控制器不应输出,您应该修复我不会从主控制器输出任何内容,只是将视图的渲染输出作为“最后”操作进行回显。要显示的内容必须由视图生成/处理。感谢您的努力,Feida,但这与我已经使用的方法基本相同,只是看起来是主控制器的一些输出,而不是预期的原因