PHP,MVC:试图重定向但控制器发送输出?

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(); 或者

我使用了一种通用的方法来定制MVC模式

控制器/动作/参数

$controller->action($param)

我如何实现重定向方法,即使用header(),因为总有来自主控制器的初始输出,但我不是有意输出任何内容


对使用流行的框架不感兴趣,我也不想重新发明轮子,只是想学习。

您可以启用输出缓冲来存储初始输出,并在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,但这与我已经使用的方法基本相同,只是看起来是主控制器的一些输出,而不是预期的原因