【问题标题】:Update and delete -- I can't update and delete data from database in Laravel framework更新和删除——我无法在 Laravel 框架中更新和删除数据库中的数据
【发布时间】:2020-01-05 17:45:44
【问题描述】:

我正在使用表单提交从数据库中更新和删除我的数据的请求,但我无法这样做。

我尝试过使用不同的方法,但我无法解决这个问题。我在这个项目中使用 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>

更新表单的刀片模板:

@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>
    <div class="form-group">
      <input type="text" name="first_name" class="form-control" placeholder="Enter your Name" />
    </div>
    <div class="form-group">
      <input type="text" name="last_name" class="form-control" placeholder="Enter last Name" />
    </div>
    <div class="form-group">
      <input type="submit" class="btn btn-primary"  />
    </div>
  </form>
</div>

更新时,我收到以下错误:

RouteCollection.php 第 251 行中的 MethodNotAllowedHttpException

删除时,我收到类似的错误:

RouteCollection.php 第 251 行中的 MethodNotAllowedHttpException

【问题讨论】:

标签: php laravel eloquent laravel-5.4


【解决方案1】:

使用Route::resource(...) 将使用HTTP 请求方法DELETEdestroy 操作和PUTupdate 操作创建路由。这意味着您必须在提交表单时使用这些方法。

很遗憾,HTML 表单不支持PUTDELETE。这就是为什么 Laravel 使用一个名为 _method 的特殊隐藏输入,它应该包含正确的方法。表单本身应该通过POST 发送。这是您的更新表单的外观(省略字段和其他标记):

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

  <!-- Your fields here -->
</form>

指令@method('put') 将生成以下html &lt;input type="hidden" name="_method" value="put"&gt;

您可以在the official documentation 中阅读有关此主题的更多信息。

【讨论】:

  • +1,那么他还需要用$request-&gt;input("id")获取ID,不能直接用$id参数访问。
  • 我放了@method('put'),但它在我的浏览器视图中显示为一个段落,在 127.0.0.1:8000/update 中。
【解决方案2】:

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

  Route::get('/update','BksController@update');
  Route::put('update','StudentController@update');
  Route::get('/delete','BksController@delete');
  Route::delete('/delete','StudentController@destroy');

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

【讨论】:

  • 我输入了@method('put') 但它在127.0.0.1:8000/update 中的浏览器视图中显示为一个段落。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 2016-08-07
相关资源
最近更新 更多