我正在尝试使用
$user
将循环迭代器变量 Datatable
从我的视图 Route
(单击编辑按钮时)传递到控制器函数。
我在
web.php
的路线:
Route::get('/add_all',[AddPersInfoController::class,'add_all'])->name('add_all');
我的控制器功能:
public function add_all($user_id){
...
}
draft.blade.php
视图中的数据表代码:
@php $i=1 @endphp
@foreach($pers as $user)
<tr>
<td>{{$i}}</td>
<td>{{$user->user_type ?? 'N/A'}}</td>
<td>{{$user->rank->name ?? 'N/A'}}</td>
<td>{{$user->name ?? 'N/A'}}</td>
<td><a href="{{route('add_all',[$user->id])}}"><button class="btn btn-icon btn-primary"> <i class="demo-pli-pencil fs-5"></i> </button> </a></td>
</tr>
@php $i++; @endphp
@endforeach
其中
$pers
变量使用 compact()
函数通过另一条路由发送到此视图。
我尝试过传递特定的变量(如
[$user->id]
)和不同的语法(如 $user
),但没有任何效果。所有这些都会给出相同的错误。
Too few arguments to function App\Http\Controllers\AddPersInfoController::add_all(), 0 passed
还有其他答案尝试建议使用
URL::to
而不是 href
。
但我想要一个仅使用 href
的解决方案。
我做错了什么?
您的路线定义不需要任何参数。您需要在
web.php
文件中的路线定义中定义一个参数。
Route::get('/add_all/{user}', [AddPersInfoController::class,'add_all'])->name('add_all');
在上面的代码中,
{user}
是您要传递给add_all
中的AddPersInfoController
方法的参数的占位符。现在,您的 add_all
中的 AddPersInfoController
方法应该能够接收 $user
参数。
public function add_all($user) {
// ...
}
在刀片文件中,您可以将
$user->id
作为参数传递给路线。
<a href="{{ route('add_all', ['user' => $user->id]) }}">
<button class="btn btn-icon btn-primary">
<i class="demo-pli-pencil fs-5"></i>
</button>
</a>