错误提示
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。