我在Symfony中有一个应用程序可以生成许多消息。模块中的每个动作都可以生成存储在数组中的消息。最后添加的消息应该显示在任何视图中(所以我在layout.php中调用该函数,以便在每个视图模板中显示消息)。许多操作重定向(通过redirect()函数;我不会在设置消息后使用forward())到另一个操作。
所以该计划如下。 - 操作A:设置消息,重定向到操作B. - 动作B:显示视图(以及当然的布局)。
当我不使用redirect()时,一切正常。但是当我设置消息($ my_array [] =“new message”)时,数组似乎在重定向('same_module / another_action')之后“死”(空)。
问题是:
如何在一个动作中设置数据(变量),在重定向(redirect())之后的另一个动作中“可访问”。我注意到当我使用forward()时,变量是可访问的,但是当我使用redirect()时,所有变量似乎都是空的。
我甚至创建了my_class并将它们的函数放在lib目录中处理(添加,显示)消息,认为至少outern文件会记住我的消息(在数组中)。但实际上没有任何改变 - 重定向后数组似乎再次为空(redirect()之后count($ messages_array)= 0)。
这对我来说真的很奇怪。任何解决方案?
答案 0 :(得分:0)
它与前向但不重定向的原因是因为重定向要求浏览器转到新的URL(发出新的http请求),但是转发在内部(在symfony内)。
如果您只需要显示这些消息,我建议使用symfony的myUser类的flash功能,该功能将在下一次请求后清除。将其设置为以下操作:
$this->getUser()->setFlash("message", "blahlahblah");
然后在您的模板中,您可以调用$sf_user->hasFlash("message")
来查看用户是否有特定类型的Flash(在示例中:message),然后通过$sf_user->getFlash("message")
获取。更长的例子:
<?php if ($sf_user->hasFlash("message")): ?>
<div class="message">
<?php echo $sf_user->getFlash("message) ?>
</div>
<?php endif ?>
有关闪光灯工作原理的详细信息,请参阅docs。
答案 1 :(得分:0)
如何在一个动作中设置数据(变量),在重定向(redirect())后的另一个动作中“可访问”。
您应该使用symfony的用户会话:
- http://www.symfony-project.org/gentle-introduction/1_4/en/06-Inside-the-Controller-Layer#chapter_06_user_session