2017-10-21 59 views
2

我最近加入了Laravel框架,所以首先我试图在laravel中创建一个CRUD系统,以了解他们的基本功能。MethodNotAllowedHttpException while laravel更新记录

现在在这里,我在更新现有记录的时间面对错误MethodNotAllowedHttpException

在这里,在我的路线

Route::resource('product', 'ProductController'); 

这给了我可能的路线

| GET|HEAD | product     | product.index   | App\Http\Controllers\[email protected] 
| POST  | product     | product.store   | App\Http\Controllers\[email protected]  
| GET|HEAD | product/create    | product.create   | App\Http\Controllers\[email protected]  
| GET|HEAD | product/{product}   | product.show   | App\Http\Controllers\[email protected]   
| DELETE | product/{product}   | product.destroy  | App\Http\Controllers\[email protected]   
| PUT|PATCH | product/{product}   | product.update   | App\Http\Controllers\[email protected]  
| GET|HEAD | product/{product}/edit  | product.edit   | App\Http\Controllers\[email protected] 

Editform视图

@extends('layouts.app') 
@section('title','Product List') 

@section('content') 

<div class="container"> 
<form action="{{url('product/'.$product['id'])}}" class="form-horizontal"> 
    <div class="form-group"> 
    <label for="exampleInputEmail1">Name</label> 
    {{csrf_field()}} 
    {{ method_field('PUT')}} 
    <!-- <input name="_method" type="hidden" value="PUT"> --> 
    <input type="text" name="name" class="form-control" id="exampleInputEmail1" value="{{$product['name']}}" aria-describedby="emailHelp" placeholder=""> 

    </div> 
    <div class="form-group"> 
    <label for="exampleInputEmail1">category</label> 
    <input type="text" value="{{$product['category']}}" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" name="category" placeholder=""> 

    </div> 
    <div class="form-group"> 
    <label for="exampleInputEmail1">weight</label> 
    <input type="text" value="{{$product['weight']}}" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" name="weight" placeholder=""> 

    </div> 
    <div class="form-group"> 
    <label for="exampleInputEmail1">price</label> 
    <input type="text" value="{{$product['price']}}" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" name="price" placeholder=""> 

    </div> 
    <button type="submit" class="btn btn-primary">Save</button> 
</form> 
</div> 
@endsection 
以下列表10

ProductController.php

public function update(Request $request, $product_id) 
{ 
    $created = product::create($request->all()); 
    if($created){ 
    return redirect('product')->with('message','data added'); 
    } 
} 

在这种情况下,每当我婉refiling编辑的形式来改变现有的记录数据。它会生成MethodNotAllowedHttpException错误。

我尝试了很多解决方案,但没有修复。所以请指导我出错的地方。谢谢

回答

2

这是因为您正在使用错误的HTTP方法更新现有记录。您需要通过欺骗方法将方法指定为PUT。 试试这个:

<div class="container"> 
    <form action="{{ route('product.update', $product['id']) }}" method="POST" class="form-horizontal"> 
     {{ csrf_field() }} 
     {{ method_field('PUT')}} //method Spoofing 
     <div class="form-group"> 
      <label for="exampleInputEmail1">Name</label> 
      <input type="text" name="name" class="form-control" id="exampleInputEmail1" value="{{ $product['name'] }}" aria-describedby="emailHelp" placeholder=""> 
     </div> 
     <div class="form-group"> 
      <label for="exampleInputEmail1">category</label> 
      <input type="text" value="{{$product['category']}}" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" name="category" placeholder=""> 
     </div> 

     <div class="form-group"> 
      <label for="exampleInputEmail1">weight</label> 
      <input type="text" value="{{$product['weight']}}" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" name="weight" placeholder=""> 
     </div> 

     <div class="form-group"> 
      <label for="exampleInputEmail1">price</label> 
      <input type="text" value="{{$product['price']}}" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" name="price" placeholder=""> 
     </div> 
     <input type="submit" name="submit" class="btn btn-primary">Save</button> //input type, not button 
    </form> 
</div> 
+0

好的,补充。但它没有回应。我的网址栏填入他们已更改的数据..! –

+0

显示完整的表格 –

+0

对不起,您需要填写哪种表格? –

1

对于update()您需要使用PUT方法。因此,将此行添加到表单中:

<input name="_method" value="PUT" type="hidden"> 
+0

好的,补充。但它没有回应。我的网址栏填入他们已更改的数据..! –

+1

只在创建时才执行重定向。覆盖未创建的案例 – ljubadr

+0

也许引用[位文档](https://laravel.com/docs/5.5/routing#form-method-spoofing)它是如何工作的 – ljubadr