如何在Laravel视图中调用类方法?

Ash*_*own 1 php for-loop laravel blade laravel-5

我正在尝试找到一种方法从刀片文件中的类文件中调用方法.foo()使用$itemforeach循环中的变量.由于我在刀片文件中循环,我无法或者更确切地说,在视图中调用控制器方法是不好的做法,或者我听说过.

myController的

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

public function foo($var) {
 //do something with $var
 return $var
}
Run Code Online (Sandbox Code Playgroud)

view.blade.php

@foreach ($data as $item)

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

@endforeach
Run Code Online (Sandbox Code Playgroud)

由于$item是在foreach(在视图内部)生成的,所以我不知道如何在返回语句之前调用方法.

有什么建议?

jak*_*_jo 8

只需与您的视图共享您的控制器:

控制器:

public function getData() {
    $data = DB::paginate(10);

    return view('view', [
        'data' => $data, 
        'controller' => $this,
    ]);
}
Run Code Online (Sandbox Code Playgroud)

视图:

@foreach ($data as $item)

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

@endforeach
Run Code Online (Sandbox Code Playgroud)

更好的方法是在控制器中生成输出:

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,
    ]);
}
Run Code Online (Sandbox Code Playgroud)