如何在 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,
]);
}
我正在尝试找到一种方法来从 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,
]);
}