该路由不支持POST方法

时间:2019-05-31 07:47:33

标签: laravel

首先,我检查了其他问题主题,但找不到解决方案。

当我尝试发布表格时。我收到此错误。

  

此路由不支持POST方法。支持的方法:   GET,HEAD。

表格:

<div class="card-body">
    <form action="{{route('profile.update', ['id' => $id])}}" method="post">
      @csrf
      @put

        <div class="form-group">
            <label for="location">Location</label>
            <input class="form-control" type="text" name="location" value="{{$info->location}}">
        </div>
        <div class="form-group">
            <label for="about">About</label>
            <textarea name="about" id="about" rows="10" cols="50" class="form-control">{{$info->about}}</textarea>
        </div>
        <div class="form-control">
            <p class="text-center">
                <button class="btn btn-primary btn-md" type="submit">Update Your Info</button>
            </p>
        </div>
    </form>
</div>

路线:

Route::group(["middleware" => "auth"], function(){
    route::get("/profile/edit", [
        "uses" => "ProfilesController@edit",
        "as" => "profile.edit"
    ]);
    route::get("/profile/{slug}", [
        "uses" => "ProfilesController@index",
        "as" => "profile"
    ]);
    route::put("/profile/update/{id}", [
        "uses" => "ProfilesController@update",
        "as" => "profile.update"
    ]);
});

在控制器中:

public function update(Request $request, $id)
{

    dd($request->all());

}

4 个答案:

答案 0 :(得分:2)

这是您提供的示例中的更正。

采用route('profile.update', ['id' => {here you have to place id of record which you want to update}])格式。

查看文件               $ info-> id])}}“” method =“ post”>             

        <div class="form-group">
            <label for="location">Location</label>
            <input class="form-control" type="text" name="location" value="{{$info->location}}">
        </div>
        <div class="form-group">
            <label for="about">About</label>
            <textarea name="about" id="about" rows="10" cols="50" class="form-control">{{$info->about}}</textarea>
        </div>
        <div class="form-control">
            <p class="text-center">
                <button class="btn btn-primary btn-md" type="submit">Update Your Info</button>
            </p>
        </div>
    </form>
</div>

在途中

Route::group(["middleware" => "auth"], function(){
    route::get("/profile/{slug}", [
        "uses" => "ProfilesController@index",
        "as" => "profile"
    ]);
    route::get("/profile/edit/profile", [
        "uses" => "ProfilesController@edit",
        "as" => "profile.edit"
    ]);
    route::post("/profile/update/profile/{id}", [
        "uses" => "ProfilesController@update",
        "as" => "profile.update"
    ]);
});

在控制器中

public function update(Request $request, $id)
{
    dd($id, $request->all());
}

答案 1 :(得分:2)

从您的问题中,我可以了解到您正在尝试使用POST方法更新配置文件,或者可能是更早的PUT方法。由于您正在编辑的资源是唯一的,因此您无需为控制器传递任何参数来查找单个资源即可对其进行更新。

因此可以像这样修改您的路线

 route::put("/profile/update/{id}", [
        "uses" => "ProfilesController@update",
        "as" => "profile.update"
    ]);

您的表单就像

<form action="{{route('profile.update', ['id' => $id])}}" method="post">
@csrf
@method('put')

您需要将要更新的配置文件的ID作为参数传递

然后在控制器上

public function update(Request $request, $id){
 //edit the profile with id = $id
}

答案 2 :(得分:2)

您的表单定义有误

 <form class="{{route('profile.update', ['id' => $id])}}" method="post">

应该是

 <form action="{{route('profile.update', ['id' => $id])}}" method="post">

答案 3 :(得分:0)

自从您为PUT请求创建表单以来,您必须进行更改

route::post("/profile/update/profile", [
    "uses" => "ProfilesController@update",
    "as" => "profile.update"
]);

对此

route::put("/profile/update/profile", [
    "uses" => "ProfilesController@update",
    "as" => "profile.update"
]);