这是我的代码
视图<form action="/categories/ {{ $category->id }}" method="POST">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button>Delete Task</button>
</form>
控制器方法
public function destroyCategory($id)
{
Categories::findOrFail($id)->delete();
return redirect('/categories');
}
路线Route::post('categories','FilesController@destroyCategory');
表单是局部视图,会有问题吗
您从表单发送DELETE
方法,但您捕获它作为post
而不是delete
在您的route
文件&也没有在route
文件中分配URL
参数。
<form action="/categories/{{ $category->id }}" method="POST">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button type="submit">Delete Task</button>
</form>
route.php
Route::delete('categories/{id}','FilesController@destroyCategory');
/categories
后面有空格,不使用提交按钮:
<form action="/categories/{{ $category->id }}" method="POST">
{{ csrf_field() }}
<input name="_method" type="hidden" value="DELETE">
<input class="btn btn-danger" type="submit" value="Delete Task">
</form>
或使用Laravel集合形式:
{!! Form::open(['method' => 'Delete', 'route' => ['task.delete', $category->id]) !!}
{!! Form::submit('Delete Task') !!}
{!! Form::close() !!}
此外,您使用post
路由而不是delete
。而且,正如@Rimon Khan所说,你没有捕捉到类别的ID:
Route::delete('categories/{id}', ['as' => 'task.delete', 'uses' => 'FilesController@destroyCategory']);
你可以这样做:
你的路由应该像:
Route::post('categories/{id}','FilesController@destroyCategory')->name('delete_categories');
你的控制器应该是这样的:
public function destroyCategory($id)
{
Categories::findOrFail($id)->delete();
return redirect()->to('/');
}
和HTML是这样的:
<form action="{{ route('delete_categories', ['id' => $category->id]) }}" method="POST">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button type="submit">Delete Task</button>
</form>
希望能有所帮助