【发布时间】:2015-09-04 00:57:26
【问题描述】:
在我的 Laravel 应用程序中(我使用的是 Laravel 5.1,但这个问题也存在于 Laravel 4 中),我有一个“用户设置”页面。当用户将他们的状态从“本科”更新为“研究生”并单击“提交”时,存储此状态的变量会在数据库中更改。
然后,我的应用会将用户带到一个确认页面,说明他们的用户设置已成功更新。
但是,在该页面上,我在视图中有一个条件,它决定了接下来要显示哪些菜单。我为本科生用户准备了一组菜单,为研究生用户准备了另一组菜单:
@if(Auth::user()->status == 'graduate')
@include('graduate_menus')
@else
@include('undergrad_menus')
@endif
由于某种原因,Auth::user 仍然返回它为“status”变量存储的先前值。如果我在页面上单击“刷新”,则 Auth::user 返回正确的值。
我已通过使用 Javascript 自动刷新页面一次来暂时解决此问题。但是,这是一个丑陋的黑客,我想了解我做错了什么 Auth::user 没有返回在上一页的 POST 中更新的值,以及是否有办法修复它。我想我可能不得不以某种方式刷新会话,但我不知道如何。提前致谢。
【问题讨论】:
-
在会话中保存一个变量状态会更好。每当用户更改其状态时更新它。在您的页面中,根据会话中存储的状态变量检查用户的状态并显示正确的菜单。更好的是,现在所有页面都可以访问同一个变量,您不必每次都调用 Auth::user。
-
@mdamia 我很欣赏你的建议,但我并不完全清楚你在说什么。你能留下答案并提供一些代码吗?在我看来,您好像在说使用 Session 来存储另一个变量,但我的问题是试图绕过 Session 似乎更新速度不够快的事实。不过,我期待看到您所描述的示例。
标签: php laravel laravel-4 laravel-5 laravel-5.1