Laravel:通过 Route 将变量/参数从blade.php 视图传递到控制器中的函数

问题描述 投票:0回答:1

我正在尝试使用

$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
的解决方案。

我做错了什么?

php laravel-blade laravel-routing laravel-10 php-8.2
1个回答
0
投票

您的路线定义不需要任何参数。您需要在

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>
© www.soinside.com 2019 - 2024. All rights reserved.