2016-05-13 13 views
1

コントローラ変数$ sickLeavesをビューに渡すことができません。これは、SickLeaveController(RESTfulリソースコントローラ)のindex.blade.php )。 私はエラーを取得しておいてください。ここでは未定義の変数 '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を取得しようとしています。これは問題です。また

@foreach($sickleaves as $sickLeave) 

、あなたが5.2.27以降を使用している場合webミドルウェアを削除:正しい変数

+0

ありがとうございました!以前は誰かが私に、with()関数の最初の引数はルートと同じでなければならないと言っていました。それは非常に混乱していた。私は(arg1、arg2)で、arg2からarg1に内容をコピーすると思いますか?それはここで何が起こっているのですか? – omrakhur

+1

@omrakhurいいえ、との最初の引数は、ルートと同じである必要はありません。これは、2番目のパラメータからペイロードを保持する鍵です。また、 ' - > with()'を使わずに、 'view( 'yourView'、$ data)'のようにデータを渡すこともできます。 '$ data'は渡すアイテムの配列です。例えば、 'view( 'sickleaves.index'、['sickleaves' => $ sickLeaves])'などです。 http://php.net/manual/en/function.compact.phpもご覧ください。変数名を変更する必要がないときに便利です。 –

+0

私は他のPHPフレームワークでcompactを使用していますので、試してみてください。 – omrakhur

2

使用。

+0

私は5.2.31を使用していますが、それを含める必要があると言ったlaracastに関する投稿がありました。 Webミドルウェアの周りにそれをラップしても問題は解決しませんでした。 https://laracasts.com/discuss/channels/laravel/errorexception-undefined-variable-errors – omrakhur

+0

申し訳ありませんが、私はあなたの答えを選択しませんでした。なぜなら、最初の回答が、 ) 関数。あなたの答えは正しいと思われるかもしれないので、私はそれを上書きしました。 – omrakhur

+1

@omrakhur、about 'web'ミドルウェア。 5.2.27以降を使用している場合は、削除する必要があります。しかし、<5.2.27から上位バージョンにアップグレードした場合は、 'app/Providers/RouteServiceProvider.php'ファイルをチェックし、' web'ミドルウェアが追加されていなければ手動で追加してください。この回答を確認してください:http://stackoverflow.com/a/36784408/1227923 –

関連する問題