2016-05-13 91 views
1

我無法將我的控制器變量$ sickLeaves傳遞到我的視圖,該視圖是通過SickLeaveController的index.blade.php實現的(這是一個RESTful資源控制器)。 我不斷收到錯誤:未定義變量 'sickLeaves'從控制器傳遞變量到Laravel 5時獲取未定義的變量

這裏是routes.php文件:

Route::group(['middleware' => 'web'], function(){ 
    Route::auth(); 
    Route::get('/', '[email protected]'); 
    Route::get('auth/logout', 'Auth\[email protected]'); 
    Route::get('/home', '[email protected]'); 
    Route::resource('sickleaves','SickLeaveController'); 
}); 

這裏是我的SickLeaveController:

class SickLeaveController extends Controller 
{ 

public function index() 
{ 

    $sickLeaves = SickLeave::all(); 

    return view('sickleaves.index')->with('sickleaves',$sickLeaves); 
} 


public function create() 
{ 
    $users = User::pluck('name','id'); 

    return View::make('sickleaves.create')->with('sickleaves',$users); 
} 


public function store(Request $request) 
{ 
    $this->validate($request, [ 
     'firstname' => 'required|max:255', 
     'lastname' => 'required|max:255', 
     'reason' => 'required|max:255', 
     'startdate' => 'required', 
     'status' => 'required',]); 
} 


public function show($id) 
{ 
    $sickLeave = SickLeave::find($id); 

    return View::make('sickleaves.show')->with('sickleaves',$sickLeave); 
} 


public function edit($id) 
{ 
    $sickLeave = SickLeave::findOrFail($id); 

    return View::make('sickleaves.edit')->with('sickleaves',$sickLeave); 
} 


public function update(Request $request, $id) 
{ 
    //TODO 
} 


public function destroy($id) 
{ 
    $sickLeave = SickLeave::findOrFail($id); 
    $sickLeave->delete(); 

    Session::flash('Item successfully deleted'); 
    return redirect()->route('sickleave.index'); 
} 
} 

這裏是index.blade.php :

@foreach($sickLeaves as $sickLeave) 
       <tr> 
        <td style="width: 8%">{{ $sickLeave->id }}</td> 
        <td style="width: 12%"><span class="fw-semi-bold">{{ $sickLeave->firstname }}</span></td> 
        <td style="width: 12%"><span class="fw-semi-bold">{{ $sickLeave->surname }}</span></td> 
        <td class="no-sort hidden-xs" style="width: 12%">{{ $sickLeave->reason }}</td> 
        <td class="hidden-xs">{{ $sickLeave->startdate }}</td> 
        <td class="hidden-xs">{{ $sickLeave->enddate }}</td> 
        <td class="no-sort">{{ $sickLeave->status }}</td> 
        <td class="no-sort"><div class="btn-group"> 
          <button class="btn btn-inverse">Actions</button> 
          <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown"> 
           <i class="fa fa-caret-down"></i> 
          </button> 
          <ul class="dropdown-menu"> 
           <li><a href="{{ route('sickleaves.show', $sickLeave->id) }}">View Details</a></li> 
           <li><a href="{{ route('sickleaves.edit', $sickLeave->id) }}">Edit</a></li> 
           <li class="divider"></li> 
           <li><a href="#">Delete</a></li> 
          </ul> 
         </div> 
        </td> 
       </tr> 
       @endforeach 

回答

1

PHP變量區分大小寫!

您通過sickleaves,但在您正在嘗試獲得sickLeaves,這就是問題所在。

+0

謝謝!以前有人告訴我,with()函數的第一個參數必須與路由相同。聽起來很混亂。我認爲用(arg1,arg2)將arg2的內容複製到arg1中?這是怎麼回事? – omrakhur

+1

@omrakhur不,第一個參數不必與路線相同。這只是一個關鍵,它將保持你的有效載荷來自第二個參數。你也可以考慮不要使用' - > with()',而是像下面這樣傳遞數據:'view('yourView',$ data)'其中'$ data'是要傳遞的數組。例如'view('sickleaves.index',['sickleaves'=> $ sickLeaves])''。也看看http://php.net/manual/en/function.compact.php。當您不需要更改變量名稱時它非常方便。 –

+0

我已經使用其他PHP框架的緊湊型,所以可能會試一試。 – omrakhur

2

使用正確的變量:

@foreach($sickleaves as $sickLeave) 

另外,如果你使用5.2.27或更高版本刪除web中間件。

+0

我正在使用5.2.31,但在laracasts上有一篇文章說我們必須包含它,這就是爲什麼我把它放在那裏,否則我將它刪除。儘管圍繞Web中間件包裝它並沒有解決問題。 https://laracasts.com/discuss/channels/laravel/errorexception-undefined-variable-errors – omrakhur

+0

對不起,我沒有選擇你的答案作爲最好的答案,因爲第一個答案清除了我對(with) )功能。你的答案也可以被認爲是正確的,所以我提出了這個答案。 – omrakhur

+1

@omrakhur,關於'web'中間件。如果您使用的是5.2.27或更高版本,則應將其刪除。但是,如果你從<5.2.27升級到更高版本,你應該檢查'app/Providers/RouteServiceProvider.php'文件,如果它沒有添加'web'中間件,你應該手動添加它。請檢查此答案:http://stackoverflow.com/a/36784408/1227923 –

相關問題