Laravel - 方法不允许HTTP异常(RouteCollection.php第218行)

时间:2017-03-15 05:02:21

标签: php laravel laravel-5.3

我目前是Laravel的新人,并试图开发我的第一个项目。我在开发过程中将数据插入数据库时​​出现MethodNotAllowedHttpException in RouteCollection.php line 218错误。我搜索过谷歌和谷歌解决方案但非解决方案的Stackoverflow与我当前的问题有关,其中一些对于这个简单的问题来说太复杂了(我想是这样......)。

我的表单在我的核对表页面中: -

<form action="{{url('addchecklist')}}" method="POST">
            {{ csrf_field() }}
            <div class="row">
                <div class="col-sm-12">
                    <div class="text-left">
                        <input type="hidden" name="schmFK" value="{{$id}}">
                        <div class="col-sm-6">
                            <h4>
                                <label>Section</label>
                                <select class="selectpicker form-control" data-live-search="true" name="sctionPK">
                                    <option selected>Select the Section</option>
                                    @foreach ($sction as $key=>$slct1)
                                    <option value="{{$slct1->ssctionPK}}">{{strtoupper($slct1->ssctionName)}}</option>
                                    @endforeach
                                </select>
                            </h4>
                        </div>
                        <div class="col-sm-2">
                        <button type="button" data-toggle="modal" data-target=".bs-example-modal-lg" class="btn btn-primary btn-sm" style="margin-top:33px; padding-top:7px; padding-bottom:7px;">Add Section</button>
                        </div>
                        <div class="col-sm-4">
                            <h4>
                                <label>Severity</label>
                                <select class="selectpicker form-control" name="svrityPK">
                                    <option selected>Select the Severity</option>
                                    @foreach ($svrity as $key=>$slct2)
                                    <option value="{{$slct2->severityPK}}">{{strtoupper($slct2->severityName)}}</option>
                                    @endforeach
                                </select>
                            </h4>
                        </div>
                        <div class="col-sm-12">
                            <h4>
                                <label>Question</label>
                                <input class="form-control" type="text" placeholder="Question" name="question">
                            </h4>
                        </div>
                        <div class="col-sm-6">
                            @include('widgets.button', array('class'=>'primary btnaddstd', 'size'=>'lg', 'type'=>'submit', 'value'=>'Add Checklist'))
                        </div>
                    </div>
                </div>
            </div>
        </form>

然后我有这条路由将表格中的数据插入数据库: -

Route::post('/addchecklist', function (Request $request){

    // Create instance to store record
    $scheme = new App\checklists;
    $scheme->schmFK = $request->schmFK;
    $scheme->schSectionFK = $request->sctionPK;
    $scheme->severityFK = $request->svrityPK;
    $scheme->clQuestion = $request->question;
    $scheme->save(); // save the input


    // Sort all records descending to retrieve the newest added record
    $input = App\checklists::orderBy('cklistPK','desc')->first();

    // Set search field variable default value of null
    $src = isset($src) ? $src : null;

    // Get Checklist reference from cklists_stddetails with the designated ID
    $chkstd = App\Cklists_stddetail::where('cklistFK', $input->cklistPK)
                                ->join('stddetails', 'stdDtlFK', '=', 'stddetails.sdtlPK')
                                ->get();

    // Get the newest stored record
    $chcklst = App\checklists::where('cklistPK', $input->cklistPK)->firstOrFail();

    // Get all data from table 'stddetails'
    $stddetail = App\stddetails::all();

    // Get all data from table 'standards'
    $stndrd = App\standard::all();

    // Get all data from table 'sections'
    $sction = App\Section::all();


    // Redirect to 'addref.blade' page with the newest added record
    return redirect('addref/'.$input->cklistPK)
        ->with('src', $src)
        ->with('chkstd', $chkstd)
        ->with('id',$input->cklistPK)
        ->with('schmid', $request->schmFK)
        ->with('chcklst', $chcklst)
        ->with('stddetail', $stddetail)
        ->with('stndrd', $stndrd)
        ->with('sction', $sction);
});

我的情况是这样,我有一个表格供用户输入数据。然后,当保存数据时,它们将被重定向到该数据的页面以执行某些操作。 数据已成功保存在数据库中,但重定向到具有最新记录ID的指定页面(addref.blade)返回错误: -

MethodNotAllowedHttpException Error

但网址是我希望它去的地方(意味着网址是正确的): -

Success URL

正如您所看到的,我发现网络的常用解决方案是: -

确保来自路线和表格的两种方法都是相同的,并且我的是: -

method="POST"

Route::post

确保网址路由可以识别表单的操作网址,并将其排除: -

<form action="{{url('addchecklist')}}" method="POST">

Route::post('/addchecklist', function (Request $request)

在表单中包含CSRF令牌字段,并将其包括在内: -

<form action="{{url('addchecklist')}}" method="POST">
            {{ csrf_field() }}

我已经尝试过在网上提供的那些简单的解决方案,没有什么是有用的。我仍然想知道我还错过了什么,并希望这里的任何人都能协助解决我的问题。

2 个答案:

答案 0 :(得分:0)

我认为错误在于您有一个尚未在routes or web.php文件中注册的重定向。

示例重定向:

Route::post('/addchecklist', function (Request $request){
    //some post process here...

    return redirect('addref/'.$input->cklistPK)
        ->with('src', $src)
        ->with('chkstd', $chkstd)
        ->with('id',$input->cklistPK)
        ->with('schmid', $request->schmFK)
        ->with('chcklst', $chcklst)
        ->with('stddetail', $stddetail)
        ->with('stndrd', $stndrd)
        ->with('sction', $sction);
});

Route::get('addref/{id}', function(Request $request){
     //show the blade.php with data
});

答案 1 :(得分:-1)

请你写一下:

URL( '/ addchecklist')

而不是:

URL( 'addchecklist')

然后print_r('in'); 死并检查你得到了什么。

  Route::post('/addchecklist', function (Request $request){

      print_r('in');
      die;
  });