2011-09-16 42 views
0

我在Symfony中有一个应用程序,它会生成许多消息。模块中的每个动作都可以生成一个存储在数组中的消息。最后添加的消息应该显示在任何视图中(所以我在layout.php中调用该函数,以便在每个视图模板中显示消息)。许多操作重定向(通过redirect()函数;在设置消息后,我不会使用forward())执行另一个操作。重定向时记住数据

所以该方案是关注。 - 操作A:设置消息,重定向到操作B. - 操作B:显示视图(以及课程布局)。

当我不使用重定向(),一切工作正常。但是,当我设置消息(my_array [] = “新邮件” $),阵列似乎 “管芯”(空)刚过重定向( 'same_module/another_action')

的问题是:

如何设置一个动作数据(变量),这将是“无障碍”的另一动作发生重定向后(重定向())。我注意到,当我使用forward()时,变量是可访问的,但是当我使用redirect()时,所有变量似乎都是空的。

我甚至产生my_class,并把它们的功能来处理(添加,显示)在lib目录的消息,以为至少outern文件会记得我的消息(数组)。但实际上没有任何改变 - 重定向后数组似乎再次变为空(redirect()后的count($ messages_array)= 0)。

对我来说真的很奇怪。任何解决方案?

回答

0

它与进步,但不是重定向的原因是因为重定向请求的浏览器进入到一个新的URL(使一个新的HTTP请求),但前确实在内部(在symfony中)。

如果你只需要一次,我建议symfony中的MYUSER类,它获取下次请求之后清除了闪光灯功能,以显示这些消息。在动作设为:

$this->getUser()->setFlash("message", "blahlahblah"); 

然后在你的模板,你可以调用$sf_user->hasFlash("message")看用户是否有特定类型的闪光灯(在本例中:消息),然后通过$sf_user->getFlash("message")得到它。较长的例子:

<?php if ($sf_user->hasFlash("message")): ?> 
    <div class="message"> 
    <?php echo $sf_user->getFlash("message) ?> 
    </div> 
<?php endif ?> 

有关flash作品如何看待docs的详细信息。