为了账号安全,请及时绑定邮箱和手机立即绑定

更新和删除——我无法在 Laravel 框架中更新和删除数据库中的数据

更新和删除——我无法在 Laravel 框架中更新和删除数据库中的数据

PHP
慕尼黑5688855 2021-12-24 09:32:16
我正在使用表单提交更新和从数据库中删除我的数据的请求,但我无法这样做。我尝试过使用不同的方法,但我无法解决这个问题。我在这个项目中使用 Laravel 5.4.36。控制器:public function update(Request $request, $id){    Student::where('id', $id)->update(['first_name' => 'vks', 'last_name' => 'pok']);}public function destroy(Request $id){    $student=Student::find($id);    $student->delete();}路线:Route::get('/student/about', 'BksController@about');Route::get('/student/service', 'BksController@Services');Route::get('create','BksController@create');Route::post('create','StudentController@create');Route::get('search','BksController@search');Route::post('search','StudentController@show');Route::get('/update','BksController@update');Route::put('update','StudentController@update');Route::get('/delete','BksController@delete');Route::delete('/delete','StudentController@destroy');Route::resource('student', 'StudentController');Route::get('/home', 'HomeController@index')->name('home');销毁形式的刀片模板:@include('student.commonlayout')<div class='col-md-6 col-md-offset-3'>  <h1>DeleteData</h1>  <hr>  <form method="post" action="{{url('delete')}}">    {{csrf_field()}}    <div class="form-group">      <input type="text" name="first_name" class="form-control" placeholder="Enter your Id" />    </div>    <div class="form-group">      <input type="submit" class="btn btn-primary"/>    </div>  </form></div>更新表单的 Blade 模板:@include('student.commonlayout')<div class='col-md-6 col-md-offset-3'>  <h1>update Data</h1>  <hr>  <form method="post" action="{{url('update')}}">    {{csrf_field()}}    <div class="form-group">      <input type="text" name="id" class="form-control" placeholder="Enter your id" />    </div>更新时,我收到以下错误:RouteCollection.php 第 251 行中的 MethodNotAllowedHttpException删除时,我收到类似的错误:RouteCollection.php 第 251 行中的 MethodNotAllowedHttpException
查看完整描述

2 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我在您的任何删除或更新路由中都没有看到 POST 方法。


  Route::get('/update','BksController@update');

  Route::put('update','StudentController@update');

  Route::get('/delete','BksController@delete');

  Route::delete('/delete','StudentController@destroy');

当您单击表单中的按钮时,它会执行 HTTP 发布。因此,将您的路线更改为相应Route:post(...)地匹配。


查看完整回答
反对 回复 2021-12-24
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

使用Route::resource(...)将创建HTTP请求方法途径DELETE的destroy行动,并PUT为update行动。这意味着您在提交表单时必须使用这些方法。


不幸的是,HTML 表单不支持PUT或DELETE。这就是为什么 Laravel 使用一个名为的特殊隐藏输入_method,它应该包含正确的方法。表单本身应该通过POST. 这就是您的更新表单的样子(省略字段和其他标记):


<form method="post" action="{{ url('update') }}">

  @method('put')

  {{ csrf_field() }}


  <!-- Your fields here -->

</form>

该指令@method('put')将生成以下 html <input type="hidden" name="_method" value="put">。


您可以在官方文档中阅读有关此主题的更多信息。


查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信