【问题标题】:Laravel 5.3 delete method gives methodNotAllowed with spoofingLaravel 5.3 delete 方法给出了带有欺骗的 methodNotAllowed
【发布时间】:2018-01-13 23:38:26
【问题描述】:

当我按下按钮时,我正在尝试使用 Laravel 的 (5.3) 销毁方法来删除对象,但是我得到了 MethodNotAllowedHttpException。

我的路线是

Route::delete('/admin/add/{id}', 'ItemController@destroy');

销毁方法是

public function destroy($id)
{
    $items = Item::where('id', $id)->get();
    foreach ($items as $item)
        $item->delete();
    return redirect('/admin/add');
}

我的表格是

<form action="{{ url('admin/add/'.$specific->id)}}" method="POST">
  {{ method_field('DELETE') }}
  {{ csrf_field() }}
  <div class="modal-footer no-border">
    <button type="submit" class="btn btn-primary">Delete</button>
  </div>
</form>

我检查了现有的路线(php artisan route:list),删除的路线显示:

DELETE   | admin/add/{id}   |          | App\Http\Controllers\ItemController@destroy

我得到的错误是

in RouteCollection.php line 218
at RouteCollection->methodNotAllowed(array('GET', 'HEAD', 'POST')) in RouteCollection.php line 205
at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD', 'POST')) in RouteCollection.php line 158
at RouteCollection->match(object(Request)) in Router.php line 766
at Router->findRoute(object(Request)) in Router.php line 621
at Router->dispatchToRoute(object(Request)) in Router.php line 607
at Router->dispatch(object(Request)) in Kernel.php line 268
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104
at Pipeline->then(object(Closure)) in Kernel.php line 150
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 117
at Kernel->handle(object(Request)) in index.php line 53
at require('/Users/username/Sites/blades/public/index.php') in server.php line 133

根据 Laravel 路由说明,我正在使用表单并使用 POST 方法欺骗 DELETE 操作,但我仍然遇到异常。任何帮助将不胜感激。

注意:我按照https://laravel.com/docs/5.2/quickstart-intermediate 的完整示例进行操作,它在那里工作得非常好。我试图在不同的项目中重新创建它是导致问题的原因。

【问题讨论】:

  • 你能检查生成的 HTML 吗?看起来您的表单毕竟发回了一个 POST 请求。
  • 它似乎正在发送一个 POST 请求。我在上面添加了一个更新,因为我发现了一些很奇怪的东西。

标签: php laravel laravel-5 destroy spoofing


【解决方案1】:

请检查$specific-&gt;id不为空,如dd($specific-&gt;id),在浏览器中打开开发者控制台并打开网络页面后,检查哪个url是正确的。

【讨论】:

  • 我查了一下,$specific->id 肯定不为空。
【解决方案2】:

我发现了问题。该表单所在的页面上方有一个不同的 POST 表单,我使用 &lt;/div&gt; 而不是 &lt;/form&gt; 标记关闭了表单。因此,它试图同时提交两个表单,并且 POST 调用发生冲突。

【讨论】:

    猜你喜欢
    • 2018-12-16
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    相关资源
    最近更新 更多