本节对应书里的The flash component。
原文翻译整理如下:

此组件用于向客户端发送通知,并通知他或她有关组件行为的状态。例如,我们可以在用户已完成注册在我们的网站或提交的联系方式后发送一个成功的通知消息。

有两种Flash消息通知方式:直接信息和session。直接信息方式在依赖注入里的直接输出消息,且不能在将来的请求上再次加载。相反,session方法将消息存储在session中,并且在它们被打印后自动清除。

这里是一个普通的Flash直接输出和Flash session的使用,假设你有一个注册页面,你在同一页上POST传递数据:

public function registerAction()
{
// … code
if ($errors) {
$this->flash->warning('Please fix the following errors: ');
foreach($errors as $error) {
$this->flash->error($error);
}
} else {
$this->flash->success('You have successfully registered on our
website');
}
}

我们的视图中,将利用getcontent()方法或content()在模板引擎Volt中(我们将在本章后面讲解)中输出信息。

如果我们需要重定向用户到另一个网页(我们叫它registerSuccess),那么我们就需要使用flash组件的session方法;否则,该消息将不会出现。

<?php
public function registerAction()
{
// render our template
}

注册页的模板将包含一个使用POST方式,且action指向create方法的表单。create方法类似如下:

<?php
public function createAction()
{
if ($errors) {
$this->flashSession->warning('Please fix the following errors: ');
foreach($errors as $error) {
$this->flashSession->error($error);
}
} else {
$this->flashSession->success('You have successfully registered
on our website');
}
return $this->response->redirect('/register');
}


在上面的示例中,我们用flashsession方法通过session传递消息,并将用户重定向到注册页。为了使信息可以输出到我们重定向后的页面,需要调用的方法flashsession() -> output();

推荐的方法是使用dispatcher(请求转发),而不是重定向。如果你使用重定向,用户将失去他或她填写的所有数据。

关于请求转发和重定向的区别,引用解答如下:
他们两个有本质的区别,简单解释来说
请求转发客户端是无感知的,比如nginx,php-fpm方式,nginx接受到php的请求,发现自己无法处理,然后就转发给php-fpm处理,然后php-fpm再把处理结果给nginx,nginx再响应给客户端
重定向你可以从客户端的角度简单的理解为发起了两次请求。

引用内容来自:https://segmentfault.com/q/1010000005167567#a-1020000005167675

Related Posts: 零基础学Phalcon 8 flash 组件 :