2013-08-06 159 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更加嚴格。