Php Laravel 5.4执行POST请求时获取方法不允许HttpException
我正在做一个从db表中获取用户的项目。我正在尝试创建一个更新方法-saveUpdateItems(),并在提交时合并表单验证。但每当我提交不完整的字段时,我就会得到MethodNotAllowedHttpException。我还创建了一个方法-SaveItems(),用于保存新记录,并合并了表单验证,但没有出现错误。我对拉雷维尔还不太熟悉。知道我为什么会出错吗?下面是一段代码Php Laravel 5.4执行POST请求时获取方法不允许HttpException,php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,我正在做一个从db表中获取用户的项目。我正在尝试创建一个更新方法-saveUpdateItems(),并在提交时合并表单验证。但每当我提交不完整的字段时,我就会得到MethodNotAllowedHttpException。我还创建了一个方法-SaveItems(),用于保存新记录,并合并了表单验证,但没有出现错误。我对拉雷维尔还不太熟悉。知道我为什么会出错吗?下面是一段代码 public function ValidateFormInput($request){ return
public function ValidateFormInput($request){
return $this->validate($request, [
'name' => 'required',
'email' => 'required',
'password' => 'required',
'role' => 'required',
]);
}
public function SaveUpdatedItems(Request $request){
$this->ValidateFormInput($request);
}
public function SaveItems(Request $request){
$this->ValidateFormInput($request);
}
路线:
Route::post('/manage/user/save', 'UserController@SaveItems');
Route::post('/manage/user/saveupdated','UserController@SaveUpdatedItems');
更新-user.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
<div class="navbar-container">
{!! Menu::get('MyNavBar')->asUl(
['class' => 'nav navbar-nav nav-pills'],
['class'=>'dropdown-menu']
) !!}
</div>
</div>
<div class="panel-body">
<h2>Update User</h2>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
{{Form::open(array('action' => 'UserController@SaveUpdatedItems', 'method' => 'post','files' => true))}}
{{ Form::hidden('_token', csrf_token() ) }}
@foreach($items as $item)
{{ Form::hidden('id[]', $item->id) }}
<table class="table table-striped table-bordered table-hover table-sm">
<tbody>
<tr>
<td>Name:</td>
<td>{{ Form::text('name', $item->name ,array('class' => 'form-control')) }}</td>
</tr>
<tr>
<td>Email:</td>
<td>{{ Form::text('email', $item->email, array('class' => 'form-control')) }}</td>
</tr>
<tr>
<td>Password:</td>
<td>{{ Form::password('password', array('class' => 'form-control')) }}</td>
</tr>
<tr>
<td>Role:</td>
<td>{{Form::select('role', $roles , null ,['class' => 'form-control'])}}</td>
</tr>
<tr>
<td>Active (?):</td>
<td>{{Form::select('is_active' , array('' => '-----', 1 => 'Yes', 0 => 'No'), $item->is_active,['class' => 'form-control'])}}</td>
</tr>
<tr>
<td>Aprroved (?):</td>
<td>{{Form::select('is_approved', array('' => '-----', 1 => 'Yes', 0 => 'No'), $item->is_approved, ['class' => 'form-control'])}}</td>
</tr>
</tbody>
</table>
@endforeach
<button type="submit" class="btn btn-primary">Submit</button>
{!! Form::close() !!}
<br>
<a href="/manage/user"> <button type="submit" class="btn btn-primary">View Users</button></a>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script type="text/javascript">
$(document).ready(function(){
});
</script>
@endsection
@extends('layouts.app'))
@节(“内容”)
{!!Menu::get('MyNavBar')->asUl(
['class'=>'导航栏导航丸'],
['class'=>'dropdown-menu']
) !!}
更新用户
@如果($errors->any())
@foreach($errors->all()作为$error)
- {{$error}}
@endforeach
@恩迪夫
{{Form::open(数组('action'=>)UserController@SaveUpdatedItems“,”方法“=>”发布“,”文件“=>true”)}
{{Form::hidden(''u-token',csrf'u-token())}
@foreach($items作为$item)
{{Form::hidden('id[]',$item->id)}
姓名:
{{Form::text('name',$item->name,array('class'=>'Form control'))}
电邮:
{{Form::text('email',$item->email,数组('class'=>'Form control'))}
密码:
{{Form::password('password',array('class'=>'Form control'))}
角色:
{{Form::select('role',$roles,null,['class'=>'Form control'])}
活动(?):
{Form::select('is_active',array(''=>'----',1=>'Yes',0=>'No'),$item->is_active,['class'=>'Form control'])}
批准(?):
{Form::select('is_approved',array(''=>'----',1=>'Yes',0=>'No'),$item->is_approved,['class'=>'Form control'])}
@endforeach
提交
{!!Form::close()!!}
@端部
@节(“脚本”)
$(文档).ready(函数(){
});
@端部
验证失败时,Laravel会将您重定向回提交无效数据的页面。此重定向将是一个GET请求
因此,如果您恰好位于只能通过POST访问的页面上,然后您提交了一个有验证错误的表单,您将通过get请求重定向回该页面,导致
MethodNotAllowedHttpException
错误。发布您的路由和表单本身。可能您的路由正在被另一个路由删除。如果必须检查,则只有一个-route::post('/manage/user/saveupdated','UserController@SaveUpdatedItems');显示更新user.blade.php
视图的路由和控制器操作是什么?啊哈。有意义:-)那么你建议我如何解决这个问题?@wendecat好吧,最好的选择是重组一切,使你符合正常的资源路由。亚当·沃特汉给了你这个想法。但是,这可能需要一些时间和精力。如果您只是想快速解决此问题,只需允许您的路由也处理get请求。谢谢您提供的信息。只是改变了路线去了。那样一切都简单多了。这只是一个愚蠢的错误。谢谢