Laravel 4仅在验证过滤后查看:: share()

时间:2014-08-14 23:38:50

标签: php laravel-4

我有一些用户数据需要与所有视图共享,列表中包含&​​#39;类型'由用户拥有。我已经设置了一个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来共享数据,然后将其应用到路由组吗?

2 个答案:

答案 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
    }
});