代码之家  ›  专栏  ›  技术社区  ›  befreeforlife

symfony\component\httpkernel\exception\methodnotallowedhttpexception在更新中

  •  0
  • befreeforlife  · 技术社区  · 6 年前

    当我单击更新按钮时,我得到下一个错误:

    symfony\component\httpkernel\exception\methodnotallowedhttpexception 没有消息

    对于更新,我有下一条路线:

    Route::post('edit/user/{id}','UsersController@update');
    Route::get('edit/user/{id}','UsersController@edit');
    

    如您所见,我使用post方法进行更新。

    我的控制器代码:

    public function edit($id){
                $user = User::where('id',$id)
                ->first();
                return view('user.edit', compact('user','id'));
            }
    
            public function update(Request $request, $id){
                $user = new User();
                $data_user = $this->validate($request,$rules_user);
                $data_user['id'] = $id;
                $user->updateUser($data_user);
                return redirect('/users');
            }
    

    my update.blade.php代码:

       @extends('layouts.app')
    
    @section('content')
    <div class="container">
    @if ($errors->any())
        <div class="alert alert-danger">
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div><br />
    @endif
        <div class="row">
        <form method="post" action="{{action('UsersController@update', $id)}}" >
            {{csrf_field()}}
            <input name="_method" type="hidden" value="PATCH">
            <div class="form-group">
           <input type="hidden" value="{{csrf_token()}}" name="_token" /> 
                <label for="name">User name:</label>
                <input type="text" class="form-control" name="name" value={{$user->name}} />
            </div>
            <button type="submit" class="btn btn-primary">Update</button>
            </form>
        </div>
    </div>
    @endsection
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Grayback    6 年前

    在action属性中,您指定了一个直接调用控制器,而不转到路由URI。因此,解决这个操作属性

    <form method="post" action="edit/user/{{$id}}" >
    

    它将通过路线并验证CSRF,然后继续执行请求。

        2
  •  0
  •   Mohamed Allam    6 年前

    你的路线应该是 放置而不是发布

    Route::put('edit/user/{id}','UsersController@update’)