在Laravel,CodeIgniter等中,我们确实具有在Session for 1请求中设置一些数据的功能。
Zend是否存在类似的情况?是否应该使用这个或者这被认为是一个坏例子?
当然我知道flashMessenger,但这只是用于消息,正如名称所示。我用Google搜索了很多,但似乎无法找到与此主题相关的任何内容。
所以,要明确的是,我想了解以下内容:
将会话用于刚刚使用过一个请求的数据是不是一个坏的例子或习惯?
Zend Framework 2是否包含类似(Laravel示例)Session :: flashdata($ key,$ value)的内容?
答案 0 :(得分:1)
要在ZF2中的会话中存储任何数据,您可以(或者更应该)使用Zend\Session\Container
的实例。
每个'容器'都接受一个'namespace'参数,允许您在容器之间独立维护会话信息。
例如,您在内部提到的Zend\Mvc\Controller\Plugin\FlashMessenger
使用具有特定命名空间FlashMessenger
的会话容器。
您可以创建会话容器并将其添加到会话容器中(有关详细信息,请查看Session Storage
,默认为Zend\Session\Storage\ArrayStorage
)
use Zend\Session\Container;
$container = new Container('my_custom_namespace');
$container->foo = array('bar');
$container->hello = 'test';
修改(标签)
您在选项卡中遇到的问题是,当您单击新选项卡时,您将不会发送新的HTTP请求(除非您使用AJAX)。因此,您需要将当前选项卡存储在本地存储中,或者存储来自 javascript 的cookie。
您还可以通过GET或POST参数传递当前选项卡。我个人在请求之间追加HTML锚#
(而不是将它存储在会话中)。
一个基本的例子可能是
// Append the currently selected tab in the anchor
$(document).on('shown.bs.tab', 'ul.nav-tabs > li > a', function (e) {
window.location.hash = $(e.target).attr("href").substr(1);
});
// check if there is already a value and display that tab
var hash = window.location.hash;
if (hash) $('.nav-tabs a[href="' + hash + '"]').tab('show');
因此任何带锚点的URL都会显示匹配的选项卡。如果您要从表单发布,可以将其添加到操作属性。
<form id="my-form" method="post" action="/the/form/target#tab-3">
答案 1 :(得分:0)
请参阅Zend Session“高级用法”文档的namespace expiration部分。您可以使用Zend_Session_Namespace::setExpirationHops(1)
调用来模拟Laravel中的'flash'方法。