首页 > 解决方案 > 此路由不支持 POST 方法。支持的方法:GET、HEAD、PUT、PATCH、DELETE。在添加字段时

问题描述

所以我正在学习laravel,我有一个问题。我在项目中有项目和任务。所以我在同一页面上添加项目任务以显示项目。每当我尝试添加任务时都会遇到此问题

网页的图像

错误的图像

错误:

The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, PATCH, DELETE.


网络路线:

Route::resource('projects', 'ProjectsController');
Route::resource('projects/{project}/tasks', 'ProjectTaskController');


路线清单:

+--------+-----------+--------------------------------------+------------------+----------------------------------------------------+--------------+
| Domain | Method    | URI                                  | Name             | Action                                             | Middleware   |
+--------+-----------+--------------------------------------+------------------+----------------------------------------------------+--------------+
|        | GET|HEAD  | /                                    |                  | Closure                                            | web          |
|        | GET|HEAD  | api/user                             |                  | Closure                                            | api,auth:api |
|        | GET|HEAD  | projects                             | projects.index   | App\Http\Controllers\ProjectsController@index      | web          |
|        | POST      | projects                             | projects.store   | App\Http\Controllers\ProjectsController@store      | web          |
|        | GET|HEAD  | projects/create                      | projects.create  | App\Http\Controllers\ProjectsController@create     | web          |
|        | GET|HEAD  | projects/{project}                   | projects.show    | App\Http\Controllers\ProjectsController@show       | web          |
|        | PUT|PATCH | projects/{project}                   | projects.update  | App\Http\Controllers\ProjectsController@update     | web          |
|        | DELETE    | projects/{project}                   | projects.destroy | App\Http\Controllers\ProjectsController@destroy    | web          |
|        | GET|HEAD  | projects/{project}/edit              | projects.edit    | App\Http\Controllers\ProjectsController@edit       | web          |
|        | GET|HEAD  | projects/{project}/tasks             | tasks.index      | App\Http\Controllers\ProjectTaskController@index   | web          |
|        | POST      | projects/{project}/tasks             | tasks.store      | App\Http\Controllers\ProjectTaskController@store   | web          |
|        | GET|HEAD  | projects/{project}/tasks/create      | tasks.create     | App\Http\Controllers\ProjectTaskController@create  | web          |
|        | GET|HEAD  | projects/{project}/tasks/{task}      | tasks.show       | App\Http\Controllers\ProjectTaskController@show    | web          |
|        | PUT|PATCH | projects/{project}/tasks/{task}      | tasks.update     | App\Http\Controllers\ProjectTaskController@update  | web          |
|        | DELETE    | projects/{project}/tasks/{task}      | tasks.destroy    | App\Http\Controllers\ProjectTaskController@destroy | web          |
|        | GET|HEAD  | projects/{project}/tasks/{task}/edit | tasks.edit       | App\Http\Controllers\ProjectTaskController@edit    | web          |
+--------+-----------+--------------------------------------+------------------+----------------------------------------------------+--------------+


添加任务的表格:

<form method="POST" action="/projects/{{ $project->id }}/tasks" class="box" >
        @csrf
        <div class="field">
            <label for="description" class="label">New Task</label>
            <div class="control">
                <input type="text" class="input" name="description" placeholder="New Task">
            </div>
        </div>
        <div class="field">
            <div class="control">
                <button type="submit" class="button is-link">Add Task</button>
            </div>
        </div>
</form>


ProjectTaskController 中的 store 方法

    public function store(Request $request, Project $project)
    {
        Task::create([
            'project_id' => $project->id,
            'description' => 'description'
        ]);
        return back();
    }

标签: phplaravelwebrouteslaravel-7

解决方案


将任务路线移到项目路线上方。目前,/projects正在匹配所有通配符/project/*路由,这意味着它不会到达 Tasks 路由。

Route::resource('projects/{project}/tasks', 'ProjectTaskController');
Route::resource('projects', 'ProjectsController');

推荐阅读