使用PHP会话向用户发送消息

使用PHP会话向用户发送消息,php,session,message,Php,Session,Message,我的课程如下: <?php class Session { function __construct() { if (empty(session_id())) { session_start(); } } function AddMessage($msg="") { if (!is_array($_SESSION['messages'])) { $_SESSION[

我的课程如下:

<?php

class Session {

    function __construct() {
        if (empty(session_id())) {
            session_start();
        }
    }

    function AddMessage($msg="") {
        if (!is_array($_SESSION['messages'])) {
            $_SESSION['messages'] = [];
        }
        array_push($_SESSION['messages'], $msg);
    }

    function GetMessages() {
        $messages = $_SESSION['messages'];
        unset($_SESSION['messages']);
        return $messages;
    }

}

?>

我的layouts目录中还有一个php文件:

<?php if (!empty($_SESSION['messages'])) { ?>
<div class="messages">
<ul>
<?php
    $messages = $session->GetMessages();
    foreach ($messages as $message) {
        echo "<li class=\"message\">{$message}</li>";
    }
?>
</ul>
</div>
<?php }?>

上面的这段代码包含在我的页面顶部。 问题是,在单页提交处理的情况下——在页面中间完成-在将消息设置为AddiMeage()方法之前,打印出消息。


是否有一种简单的方法来解决这个问题,或者我必须重新考虑我的代码流?

因此,基本上您已经在处理完请求之前开始渲染视图了?那么我只能建议您在渲染HTML之前先处理业务逻辑。如果你不想使用MVC框架,你不必“必须”使用,只要试着不要一次完成所有的事情。使用模板引擎怎么样?例如smarty@user3210615你可以使用模板引擎当然,就我个人而言,我不是Smarty的粉丝,我可能会选择Twig。但你的问题是找到一个解决办法,或者改变你的流程。第一个选项可以解决这一问题,但后一个选项将解决所有未来问题。将控制器从视图中分离正在更改您的代码流。您能否简要解释您的解决方案或参考教程?