【问题标题】:Method not allowed in Laravel 5.4Laravel 5.4 中不允许的方法
【发布时间】:2017-12-10 02:44:26
【问题描述】:

我在提交选择框时遇到方法不允许错误。
我正在从视图中发送文件 url 和数组。我从控制器打印了这些值,它工作正常,但是当尝试插入数据库时​​,我收到错误 MethodNotAllowedHttpException。如果我使用 dd( $excelData) 我正在获取数据,则路线工作正常。

public function uploadExcelData(Request $request)
{
    $url   = request('link');
    $array = request('index');
     print_r($array);
     echo $url;

    $excelData    = (Excel::load($url))->get();

    if(!empty($excelData) && $excelData->count()){

        foreach ($excelData->toArray() as $key => $value) {

            if(!empty($value)){

                    $insert[] = ['JobTitle' => $value[$array[0]], 'Skills' => $value[$array[1]],
                                 'Package'=>$value[$array[2]],"Location"=>$value[$array[3]]];           
            }
        }

        if(!empty($insert)){
            Jobposting::insert($insert);
            return back();
        }else{
            echo "empty";

        }
    }
}

这是刀片文件

<?php
//print_r($excelHeaders);
 // print_r($dbHeaders); 
 // @dd($excelData);
 //echo $url; onsubmit="return insertOrder();"
 ?>
<form  action="{{ URL::to('uploadExcelFile') }}" class="form-horizontal" method="POST" onsubmit="return insertOrder();">
{{ csrf_field() }}
 <table>
@for ($i=1; $i < sizeof($dbHeaders); $i++) 
<tr>
  <td> <input type="text" name="" value="{{$dbHeaders[$i]}}" disabled="disabled" class="droptargetinputs inputfields">
 <!--  <input type="hidden" name="{{$dbHeaders[$i]}}" id="{{$dbHeaders[$i]}}" value=""> -->
  </td>
  <td>
  	<select class="order">
  	<option>Select</option>
		  @for ($j=1; $j < sizeof($excelHeaders); $j++) 
		  		<option value="{{ $excelHeaders[$j]}}">{{ $excelHeaders[$j]}}</option>
		  @endfor
  	</select>
 <input type="hidden" name="link" value="{{$url}}">
  </td>
</tr>
@endfor
<tr><td><input type="submit" name="submit" value="click"></td><td><!-- <input type="button" name="submit" 
onclick="insertOrder()" value="mapping"> --></tb></tr>
</table>
<div id="hidden"></div>
</form>
<script type="text/javascript">
	   function insertOrder(){
         var table  = document.getElementsByClassName("order");
         var array  = Array();
         for(i=0; i<table.length; i++){
         	 // array[i] = table[i].value;
         	 // alert(array);

            var hide   = document.createElement("INPUT");
		    hide.type  ="hidden";
		    hide.value = table[i].value; 
		    hide.name  = "index[]"; 
		    var attach = document.getElementById('hidden');
		    attach.appendChild(hide);

         }


        }
</script>
</body>

我的路线:

Route::get('uploadHome','ExcelController@showUpload');

Route::POST('importExcelFile', 'ExcelController@importExcel');

/*Route::match(['get', 'post'],'uploadExcelFile', 'ExcelController@uploadExcelData'); */

Route::POST('uploadExcelFile', 'ExcelController@uploadExcelData');

【问题讨论】:

  • 发布刀片文件
  • @Exprator 我做了你现在可以检查一下
  • 方法错误是什么?像 404 还是 403??
  • @Exprator 我添加了我的错误图像,你可以检查一下
  • 控制器中的 return back() 出现错误,发布后您试图再次返回,因此将其更改为重定向返回或重定向到其他路由

标签: php laravel-5


【解决方案1】:

假设你仔细检查了这个:

如果我使用 dd($excelData) 我正在获取数据,则路由工作正常。

我认为问题可能出在这里:

return back();

我认为您的路线动词在某处有些混乱。所以你可以尝试像这样重定向:

return redirect('/my-route-that-works');

如果这仍然不起作用,您也应该发布您的路线文件,因为在这种情况下,我认为您的路线不能“正常工作”。

阅读您的评论和更新,您似乎用大写写了Route::POST,这不是正确的方式。尝试替换:

Route::POST

作者:

Route::post

【讨论】:

  • 我也添加了我的路线,你可以检查一下
  • 好的!将Route::POST 替换为Route::post
猜你喜欢
  • 1970-01-01
  • 2018-02-02
  • 2018-07-06
  • 2018-08-25
  • 2017-11-28
  • 1970-01-01
  • 2018-09-09
  • 2020-07-25
  • 2018-07-16
相关资源
最近更新 更多