Php Laravel 4视图::仅在身份验证筛选后共享()
我有一些需要与所有视图共享的用户数据,一个由用户拥有的“类型”列表。我已经设置了一个view::share来实现这一点,并将其放置在“auth”过滤组中的my routes.php中,如下所示:Php Laravel 4视图::仅在身份验证筛选后共享(),php,laravel-4,Php,Laravel 4,我有一些需要与所有视图共享的用户数据,一个由用户拥有的“类型”列表。我已经设置了一个view::share来实现这一点,并将其放置在“auth”过滤组中的my routes.php中,如下所示: routes.php /* Authenticated group */ Route::group( array('before' => 'auth'), function() { // Bring list of user's Types into views for sidebar
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 */
});
这在用户登录时正常工作,但是当用户注销时,它会抛出试图获取非对象属性的错误。我是否误解了路由过滤的工作原理?我猜这个View::share
仍在处理中,即使它位于“auth”筛选路由组中
正确的方法是什么?我是否应该创建一个Route::filter
来共享数据,然后将其应用于路由组?这是因为Auth::user()
在未登录时返回非对象。我们需要对此作出解释
if ( Auth::check() ){
View::share( 'types', User::find( Auth::user()->id )->types );
} else {
View::share( 'types', $some_other_types_here );
}
您可以只在过滤器中共享变量
假设您使用Laravel的默认身份验证过滤器(在filters.php
中):
这就是我所想的,但我认为身份验证过滤是在做auth::check()
?另外,将这种身份验证检查逻辑放在我的路由中是否不正确?
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
}
});