2016-04-05 21 views
1

ブレードファイル内のクラスファイル内からメソッドを呼び出す方法を見つけようとしています。 foo()はforeachループの変数$itemを使用します。私はブレードファイル内をループしているので、ビュー内でコントローラメソッドを呼び出すことはできないか、あるいは聞いたことがありません。 $itemが(ビュー内にある)foreachで生成されているので、私は前にメソッドを呼び出す方法がわからないLaravelビュー内でクラスメソッドを呼び出す方法は?

public function getData() { 
    $data = DB::paginate(10); 
    return view('view', ['data' => $data]); 
} 

public function foo($var) { 
//do something with $var 
return $var 
} 

view.blade.php

@foreach ($data as $item) 

<td>{{$item->key}}</td> 
<td>{{ //myController::foo($item) is Essentially the output I need }} </td> 

@endforeach 

MyController returnステートメントのビューにはそれがあります。

提案がありますか?

答えて

7

ちょうどあなたのビューを使用して、コントローラを共有する:

コントローラー:

public function getData() { 
    $data = DB::paginate(10); 
    return view('view', ['data' => $data, 'controller' => $this]); 
} 

を表示:

@foreach ($data as $item) 

<td>{{$item->key}}</td> 
<td>{{ $controller->foo($item) }} </td> 

@endforeach 

より良い方法は、コントローラに出力を生成するために、次のようになります。

public function getData() { 
    $data = DB::paginate(10); 
    $data = array_map(function($item) { 
     $item->output = $this->foo($item); 
     return $item; 
    }, $data); 
    return view('view', ['data' => $data]); 
} 
+0

これは素晴らしいことです。クラスがあるヘルパーファイルを参照するのはどうでしょうか? @ 'App \ Helpers \ Helper.php'としましょう – ProEvilz

+1

あなたを正しく理解していれば、クラスをインスタンス化してビューと共有するだけです:$ helper = new \ App \ Helpers \ Helper(); ...ビューを返す( 'view'、['helper' => $ helper]); –

関連する問題