2013-08-06 134 views
0

我看到了这个问题。我有类似的问题,但它不起作用。 Laravel 4 public functionsLaravel 4查看作曲家不工作

我有一个视图作曲家,其中包含基本布局的一些代码。这是我的作曲家:

View::composer(array('common.menu_addition','common.base_errors','common.view_special'), function($view) 
{ 
    if(Auth::check()) { 
     $roles = Auth::user()->type; 
     if ($roles == '5') { 
      $view->with('roles', $roles); 
     } else { 
      return Redirect::to('news/index'); 
     } 
    } 
}); 

当我没有登录,它完美的作品。但我的一个作曲家的文件是这样的:

<div class="pull-right"> 
@if (Auth::check()) 
        @if ($roles == 5) 

         <ul class="nav"> 
         <li> 
          <a href="{{ URL::to('admin/dash') }}"> 
          <i class="icon-eye-open"> 
          </i> 

          <strong> 
           Admin Dashboard 
          </strong> 
          </a> 
         </li> 
         </ul> 

         @endif 
         @endif 
         </div> 

当我登录时,它不会显示任何网站。它只是在该视图作曲文件中说Undefined variable: roles

+0

我不认为回报将与View Composer的工作,因为鉴于::作曲家仅用于将数据传递到视图 –

+0

@TryingTobemyself 我只是希望它有每一个网站,我加载的角色,并加载我发布的视图。当我退出时它工作正常,但是当我登录时,我得到错误。 –

+0

可以发布确切的错误?你在哪一行出错? –

回答

0

我不认为有可能在你的视图编辑器中返回这样的重定向。即使你可以把这个逻辑放在一个不好的地方。如果用户没有正确的认证级别,您应该创建一个筛选器http://four.laravel.com/docs/routing并重定向。

+0

我已经有一个:'路线::过滤器( '管理员',函数(){ 如果 (AUTH ::检查()){ $ 角色=验证::用户() - >作用; 如果($角色== '5'){ 回报 重定向到::( '新闻/指数') - >与( '角色',$角色);} } 其他 { 回报 查看::使('errors.401'); } });'然后,我需要一个视图作曲家吗?另外,我怎么能做'$角色= Auth :: user() - >类型;'去我加载的每个站点?我在我的问题中发布的观点是否有效? –

0

看起来你并没有事先定义$角色,也没有将$角色传递给你的视图。

当您对视图中的$角色进行检查时,您需要确保该变量实际存在。另一种可能性是,以检查更改为类似

@if (isset($roles) && $roles == 5) 

忽略错误但得到从长远来看非常的混乱。

因此,请务必在视图编辑器和其他地方预先初始化视图变量。对于非初始化变量,Laravel试图比PHP更加严格。