我多年来一直在使用自己的方法,但我想也许这不是最好的方法.
基本上当我想向用户抛出错误或显示成功操作的确认时,我会执行以下操作:
if($something == "condition") {
$_SESSION["message"] = "Your passwords didnt match! Make sure they are the same in both fields!";
$_SESSION["message_type"] = 1;
header("Location:register.php");
exit();
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个像这样的功能
function show_message() {
global $_SESSION;
if (isset($_SESSION["message"])) {
echo "<div class='site_message type_" . $_SESSION["message_type"] . "'>" . $_SESSION["message"] . "</div>";
unset($_SESSION["message"]);
unset($_SESSION["message_type"]);
}
}
Run Code Online (Sandbox Code Playgroud)
我把show_message(); 在每个页面的顶部显示可能出现在此页面上的错误.
这可能有什么问题?
我认为这种方法没有什么问题。您会在很多框架中发现这种技术的不同名称,例如Zend Framework 中的 FlashMessenger。通常,Session 被包装在一个对象中,而不是常规的 Session 数组中,并且使用 ViewHelper 而不是函数。
为了确保分配消息时会话键中没有任何拼写错误,您也可以将分配代码包装到一个函数中,例如
function set_message($text, $type)
{
$_SESSION['message'] = array(
'text' => $text,
'type' => $type
);
}
Run Code Online (Sandbox Code Playgroud)
您可以通过让函数返回字符串而不是echoing 来改进它,我个人会用它sprintf来格式化输出。使代码更具可读性,恕我直言,例如
return sprintf('<div id="message-box" class="type-%s">%s</div>',
$_SESSION["message"]["text"],
$_SESSION["message"]["type"]);
Run Code Online (Sandbox Code Playgroud)
就像@Gumbo 指出的那样,当会话不起作用时,该函数可能不起作用,但这可能会给整个应用程序带来许多其他问题,所以我不会完全担心这段特定的代码。
小事: $_SESSION 是一个超全局变量,因此您不必使用该global关键字。
| 归档时间: |
|
| 查看次数: |
1858 次 |
| 最近记录: |