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

How to call class method inside a Laravel view?

我正在尝试找到一种方法来从 class 文件中的 blade 文件中调用方法。 foo() 使用 foreach 循环中的 $item 变量。因为我在 blade 文件中循环,所以我不能,或者更确切地说,这是一种不好的做法,在视图中调用控制器方法,或者我听说过。

我的控制器

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

由于$item是在foreach(在视图内部)中生成的,我不知道如何在过去之前调用方法到 return 语句中的视图。

有什么建议吗?

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

控制器:

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,
    ]);
}