关于更新方法出现错误

时间:2018-08-05 10:03:46

标签: php laravel laravel-5

我正在尝试执行UPDATE操作,但收到错误Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException。当我按UPDATE按钮进行数据更新时出现此错误。我无法理解错误原因。请帮忙!!!

控制器块更新方法

public function update(Request $request, $id)
    {
        $book = Book::find($id);
        $book -> BookName = $request->get('NBookName');
        $book -> BookID = $request->get('NBookId');
        $book -> BookUnitPrice = $request->get('NBookUnitPrice');
        if($book->save())
            {
                return view('pages.book', $this->fetchData())->with('alert-success', 'books updated successfully.');
            }  
            else
            {
                return redirect()->back()->with('alert-success',$error->getMessage()); 
            }
    }

更新页面

<form class="form-horizontal" method="POST" action="{{action('BookController@update', $id)}}" enctype="multipart/form-data">
                {{ csrf_field() }}
                <input type="hidden" name="_method" value="PATCH"/>


        <div class="row" style="padding-left: 1%;">
                <div class="col-md-4">
                    <div class="form-group">
                        <label>Book Name</label><span class="required">*</span>
                        <input type="text" value="{{$book->BookName}}" maxlength="100" minlength="3" autofocus="autofocus" autocomplete="off" required="required" name="NBookName" class="form-control"/>
                    </div>
                </div>
                <div class="col-md-4">
                    <div class="form-group" style="padding-left: 5%;">
                        <label>Book ID</label><span class="required">*</span>
                        <input type="text" value="{{$book->BookID}}" maxlength="10" minlength="1" autocomplete="off" required="required" name="NBookId" class="form-control"/>
                    </div>    
                </div>
                <div class="col-md-4">
                    <div class="form-group" style="padding-left: 5%;">
                        <label>Unit Price</label><span class="required">*</span>
                        <input type="text" value="{{$book->BookUnitPrice}}" maxlength="5" required="required" autocomplete="off" runat="server" name="NBookUnitPrice" class="form-control" onkeypress="return decimalOnly(event)"/>
                    </div>                                   
                    <div class="form-group" style="padding-left: 5%;">
                        <button type="submit" class="btn btn-primary">Update</button>        
                    </div>                                      
                </div>
        </div>
</form> 

路线列表

// for books
Route::get('/book','BookController@create');
Route::post('/book','BookController@store');
Route::get('/book/{id}','BookController@edit');
Route::patch('/book/{id}', 'BookController@update');

我将路由方法从PUT更新为PATCH,它起作用了。现在数据正在更新。但是UPDATE中的成功消息无法显示。 请帮助!!! 请查看错误页面随附的图像。 enter image description here

1 个答案:

答案 0 :(得分:0)

您要么必须更改

<input type="hidden" name="_method" value="PATCH"/>

<input type="hidden" name="_method" value="PUT"/>

或更改

Route::put('/book/{id}', 'BookController@update');

Route::patch('/book/{id}', 'BookController@update');