我正在用php mvc做一个项目,但没有框架。我以这种方式组织文件:
我创建了一个登录页面(View / login.php),其中包含一个动作值为public / index.php的表单。在index.php中有以下代码:
$controller = new LoginController();
$view = $controller->invoke();
$view->render();
invoke()是Controller / LoginController.php中的一个函数,它读取用户输入的数据并控制它们,如果它们是正确的(数据库中有用户使用用户名和密码)则创建两个全局变量,重定向:
$_SESSION['logged_in'] = 1;
$_SESSION['username'] = $username;
$url = "../public/home.php";
header("Location: $url", true, 302);
exit();
public / home.php这样做:
$controller = new HomeController();
$view = $controller->invoke();
$view->render();
HomeController是一个扩展Controller的类。 Controller的构造函数查看是否存在变量$ _SESSION ['logged_in']和$ _SESSION ['username']。 如果它们不存在,则会重定向到public / index.php。
我的问题是带标题的行(“refresh:0; url = .. / public / home.php”);没有重定向。
说明:当我插入正确的数据(注册用户)重定向一小段时间,然后返回home.php。 相反,它应该重定向到home.php并留在那里,不要去index.php。
我也试过header("refresh: 0; url = ../public/home.php");
,但这也是同样的问题。
我该如何解决这个问题? 谢谢,抱歉我的英语不好!
答案 0 :(得分:3)
在页面顶部添加php ob_start()
功能。如果在另一个ob_start()处于活动状态时调用ob_start()。只需确保调用ob_end_flush()适当的次数。如果多个输出回调函数处于活动状态,则将按嵌套顺序依次对每个输出回调函数进行过滤。