【问题标题】:The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, PATCH, DELETE. while adding a field此路由不支持 POST 方法。支持的方法:GET、HEAD、PUT、PATCH、DELETE。在添加字段时
【发布时间】:2020-08-27 11:41:23
【问题描述】:

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

An image of the web page

An image of the error

错误:

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();
    }

【问题讨论】:

  • 您在 projects/6 上调用 POST,这是不正确的,应该是 projects/6/tasks,表单似乎正确

标签: php laravel web routes laravel-7


【解决方案1】:

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

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

【讨论】:

  • 问题出在 $fillable 变量上。我已经修复了它(不改变路线的顺序),一切都按原样工作。所以我认为顺序没有任何区别。此外,我认为/projects 只匹配路由列表中提到的通配符,而不是/projects/*
  • 可填充对错误消息没有意义,但如果它有效,那就太好了。
【解决方案2】:

我刚刚意识到我正在尝试填充的字段没有添加到 $fillable 变量中。

之前:

protected $fillable = ['completed'];

之后:

protected $fillable = ['completed','project_id','description'];

【讨论】:

    猜你喜欢
    • 2020-04-11
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 2019-10-11
    • 2019-12-29
    • 2020-05-27
    相关资源
    最近更新 更多