【问题标题】:How can I delete this Laravel form using get method如何使用 get 方法删除此 Laravel 表单
【发布时间】:2021-03-09 04:43:30
【问题描述】:

“删除”方法不起作用,所以我使用了“获取”,但我的数据没有删除

<form method="post" class="delete_form" action="{{ url('/data', $row['id']) }}" id="studentForm_{{$row['id']}}">
  {{ method_field('GET') }}
  {{  csrf_field() }}
  <button type="submit" class="btn btn-danger">{{ trans('Delete') }}</button>
</form>
               
  public function destroy($id)
  {
    dd($id);
    $student = Student::where('id',$id)->delete();
    return redirect('/data/{id}')->with('success', 'Data Deleted');
  }
}

Route::get('/data/{id}','App\Http\Controllers\StudentController@index');
Route::delete('/data/{id}','App\Http\Controllers\StudentController@destroy');

【问题讨论】:

  • 您的表单发送的是 POST 请求,而不是 GET
  • 你通过 POST 搜索看到 method="post",删除后你也不能重定向到已删除的 id
  • 永远不要使用 GET 进行删除。机器人可以访问 GET,然后您可能会丢失数据。
  • 您还应该删除dd($id);,因为它会退出您的脚本,之后的代码将不会被执行
  • 请说明究竟您想要实现什么

标签: php html jquery mysql forms


【解决方案1】:

表单必须通过delete方法提交

<form method="POST" action="{{ url('/data', $row['id']) }}"> 
    @method('DELETE')
    @csrf
  <button type="submit" class="btn btn-danger">{{ trans('Delete') }}</button>
</form>

更多详情可以在这里找到:https://laravel.com/docs/8.x/routing#form-method-spoofing

【讨论】:

  • 但我使用 delete 方法会引发错误,Get 方法正在工作,但问题是帖子拒绝删除并且没有显示错误,所以我很想得到另一个合适的答案。谢谢。
  • 我认为这里的问题不是它应该来自路线的方法嗯我不认为控制器有任何问题,但您可以检查是否有然后让我们知道前进的方向。
  • 你可以试试 dd($student) 看看输出什么?
  • 你可以试试 if($student) then redirect
【解决方案2】:

这就是我终于得到答案了 我运行了以下命令:

php artisan route:clear
php artisan route:list

然后它给了我建议的方法,并为“Controller@destroy”路由显示了删除方法,然后我从“get”方法更改为“delete”方法。然后,我的帖子就可以删除了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2015-04-08
    • 2016-02-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    相关资源
    最近更新 更多