2011-04-19 59 views
1

我有一个控制器,它可以显示和处理表单的回发。一旦表格被成功验证并且相应地处理了数据,控制器就会重定向到另一个页面。带消息的PHP重定向

重定向完成的东西就等同于:

@header('Status: 303 See other'); 
@header('Location: ' . $redirect_uri); 

什么是控制器的最可靠的方式提供的消息是新的页面上显示?这是否有一个标准的做法?

即“您的帐户已成功更新。”

我的想法是动态生成的消息放到一个会话变量,并表示与在URI本身具有唯一ID的预定义的消息:在会话变量

$_SESSION['previous-response-msg'] = "Account of '$user_name' was updated."; 

or 

$redirect_uri = 'http://example.com/other-page?msg=42'; 
+0

我认为这完全是一个偏好问题。 – 2011-04-19 14:45:05

回答

1

一次消息已经为我工作得很好。这里我没有看到很多问题,特别是对于状态类型的消息。

如果你使用的是框架,它很可能是内置的。

+0

如果同一个会话中的同一个用户同时执行两个回发,是否有可能使用同一个消息进行重定向(即使消息可能需要不同)? – 2011-04-19 14:55:11

+1

我这样做(在会话中保存消息并在下一页加载时显示它(并从会话中删除它)以供内部应用程序使用。效果很好。只有怪癖有时用户在两个选项卡中处理两页非常快,并且两个选项卡的两个状态消息出现在一个选项卡中,而不是一个选项卡中的一个消息,另一个选项卡中的另一个消息。为此,您需要在会话中保存一组消息,而不仅仅是一条消息。 – 2011-04-19 15:36:38

+0

@Carlos你如何将正确的信息映射到正确的页面?使用$ _GET查询参数? – 2011-04-19 17:26:07

1

使用会话将允许更灵活的消息,但无论哪种方式将工作。我没有意识到的“最佳做法”。

2

您的第二种方法是调整非安全页面内容的好方法。无论你想要的信息出现在你的网页上,你可以...

if (isset($_GET['msg']) && $_GET['msg'] == '42') { 
    echo '<div>Your account was successfully updated</div>'; 
} 

很简单,我想。

0

你不能使用ajax,然后添加一个成功和失败回调,它显示你发送数据的文件的响应数据吗?

+0

我在某些地方使用AJAX,但有几个地方我觉得页面的变化非常重要。就像删除用户帐户时一样,我不喜欢使用AJAX进行这种活动,因为我觉得页面的改变强调了这种程序的破坏性。 – 2011-04-19 15:49:15

+0

是的,我猜当用户知道或看起来好像它发生了时,用户会感到放松 – 2011-04-20 10:11:56