【问题标题】:Laravel 5 form submit creates an error MethodNotAllowedHttpExceptionLaravel 5 表单提交创建错误 MethodNotAllowedHttpException
【发布时间】:2015-08-26 19:22:44
【问题描述】:

我正在使用 Laravel 5。编辑表单时出现此错误

MethodNotAllowedHttpException

有一些帖子,但我认为它可能是特定于代码的。如果可能,我宁愿不使用资源路由方法。路线:

    Route::get('profile/edit', array('as' => 'admin.profile.edit', 'uses' => 'ProfileController@edit'));
    Route::post('profile/edit', array('as' => 'admin.profile.update', 'uses' => 'ProfileController@update'));

表格是:

{!!Form::model($profile,array('method'=>'Patch','route' =>array('admin.profile.update'))) !!}

控制器:

public function update()
{
    $user_id=$this->user->id;
    $input=array_except(Input::all(),'_method');
    Profile::where('user_id','=',$user_id)->update($input);
    return Redirect::route('admin.profile.index');

}

这是错误信息:

n RouteCollection.php line 207
at RouteCollection->methodNotAllowed(array('GET', 'HEAD', 'POST')) in RouteCollection.php line 194
at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD', 'POST')) in RouteCollection.php line 142
at RouteCollection->match(object(Request)) in Router.php line 729
at Router->findRoute(object(Request)) in Router.php line 652
at Router->dispatchToRoute(object(Request)) in Router.php line 628
at Router->dispatch(object(Request)) in Kernel.php line 214
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in VerifyCsrfToken.php line 43
at VerifyCsrfToken->handle(object(Request), object(Closure)) in VerifyCsrfToken.php line 17
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 55
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 61
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 40
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Kernel.php line 115
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84
at Kernel->handle(object(Request)) in index.php line 53

感谢任何帮助

【问题讨论】:

    标签: php forms controller routes laravel-5


    【解决方案1】:

    你能改一下吗:

    Route::post('profile/edit', array(
      'as' => 'admin.profile.update', 
      'uses' => 'ProfileController@update'
    ));
    

    到这里:

    Route::patch('profile/edit', array(
      'as' => 'admin.profile.update', 
      'uses' => 'ProfileController@update'
    ));
    

    我认为您的表单操作可能需要匹配的路由动词

    http://laravel.com/docs/5.1/routing#basic-routing

    第二期:

    Column not found: 1054 Unknown column '_method' in 'field list' (SQL: update user_profile` set _method = PATCH, _token =
    

    将此添加到控制器的顶部

    use Illuminate\Http\Request;
    

    然后更新你的方法:

    public function update(Request $request)
    {
        $user_id = $this->user->id;
    
        $input = $request->except('_method', '_token');
    
        Profile::where('user_id','=', $user_id)->update($input);
    
        return Redirect::route('admin.profile.index');
    
    }
    

    【讨论】:

    • Column not found: 1054 Unknown column '_method' in 'field list' (SQL: update user_profile` set _method = PATCH, _token = ...`我现在明白了
    • 我认为这是因为$input=array_except(Input::all(),'_method'); 没有按照您的意愿执行操作,然后它尝试在更新时将其插入数据库。我会在一分钟内更新我的答案。
    • Route::post 更改为Route::patch 是的,它可以工作。您能否描述原因以及如何解决问题?
    • @mapmalith 因为提问者在他的表单标记中指定了补丁方法并且需要一个端点来匹配它。
    • @haakym 询问的原因是我正在使用 <form action="{{ url('profile/update') }}" method="post"> 并且有相同的 MethodNotAllowedHttpException 并且您的 Route::patch 解决方案解决了这个问题。
    【解决方案2】:

    在我的情况下,可以在模型文件中添加 protected $guarded = ['_token'];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      相关资源
      最近更新 更多