Laravel删除按钮抛出错误'找不到页面


Laravel delete button throwing out error "page couldn't be found

这是我的代码

视图

<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>

希望能有所帮助