我有一些用户数据需要与所有视图共享,列表中包含'类型'由用户拥有。我已经设置了一个view :: share来实现这一点,并将它放在我的routes.php里面,并且在#aut;'像这样过滤组:
routes.php
/* Authenticated group */
Route::group( array('before' => 'auth'), function() {
// Bring list of user's Types into views for sidebar menu generation
View::share( 'types', User::find( Auth::user()->id )->types );
/* Some user routes */
});
当用户登录时,这可以正常工作,但是当他们注销时会抛出Trying to get property of non-object
错误。我误解了路由过滤的工作原理吗?我猜这个View::share
仍在处理中,即使它位于' auth'过滤后的路线组。
这样做的正确方法是什么?我应该创建一个Route::filter
来共享数据,然后将其应用到路由组吗?
答案 0 :(得分:1)
这是因为Auth::user()
在未登录时返回非对象。需要考虑到这一点。
if ( Auth::check() ){
View::share( 'types', User::find( Auth::user()->id )->types );
} else {
View::share( 'types', $some_other_types_here );
}
答案 1 :(得分:1)
您可以在过滤器中共享变量。
假设您使用Laravel的默认身份验证过滤器(在filters.php
中):
Route::filter('auth', function()
{
if (Auth::guest()) {
View::share('types', 'not_logged_in');
return Redirect::guest('login');
}
else {
View::share('types', User::find( Auth::user()->id )->types);
// If you are not returning anything, this filter passes
}
});