在路由Laravel中发送参数到控制器



错误提示

Method AppHttpControllersFrontendAtributAtributDashboardController::deleteData/{id} does not exist.

我这样写我的路由:

Route::group([
'prefix' => 'atribut',
'as' => 'atribut.'
], function () {

Route::group(['prefix' => 'tabHome', 'as' => 'tabHome.'], function () {
Route::get('', [AtributDashboardController::class, 'showTab'])->name('showTab');
Route::post('', [AtributDashboardController::class, 'addData'])->name('addData');
Route::get('', [AtributDashboardController::class, 'deleteData/{id}'])->name('deleteData');

});

在控制器中我也已经写了这些:

public function deleteData($id)
{
$this->inpData->deleteData($id);
return redirect('atribut/tabHome');
}

我从我的模型中调用$this->inpData->deleteData($id):

public function deleteData($id)
{
DB::table('inp_datas')->where('id', $id)->delete();
}

这是删除按钮按下时的动作:

@forelse ($dataDisplay as $data)
<tr>
<td>{{$data->name}}</td>
<td>
<a href="{{route('frontend.atribut.tabHome.deleteData', $data->id)}}" class="btn btn-sm btn-danger">Delete</a>
</td>
</tr>
@empty
@endforelse

为什么说这个方法不存在?

您可以在文档中看到,Route的第一个参数是路由name,并且在数组中您必须指定类和它的方法。

为什么说方法不存在?

在您的AttributDashboardController中,您有deleteData方法,而不是deleteData/{id}。在您的例子中,deleteData/{id}更可能是路由名。

对于你的例子,delete route应该是这样的:

Route::get('deleteData/{id}', [AtributDashboardController::class, 'deleteData'])->name('deleteData');

或:

Route::get('{id}', [AtributDashboardController::class, 'deleteData'])->name('deleteData');

Laravel足够聪明,可以将{id}参数作为$id参数传递给deleteData方法。

HTTP DELETE

另外,如果你想在这条路由上删除,你可能会受益于阅读可用的路由器方法,尤其是HTTP delete。

相关内容

  • 没有找到相关文章

最新更新