1

我正在 Laravel 6 中构建一个讨论表单。我使用的路由是 POST 方法,我在route:list. 我收到以下错误,为什么?

此路由不支持 POST 方法。支持的方法:GET、HEAD、PUT、PATCH、DELETE

看法

<form action="{{ route('replies.store', $discussion->slug) }}" method="post">
    @csrf
    <input type="hidden" name="contents" id="contents">
    <trix-editor input="contents"></trix-editor>
    <button type="submit" class="btn btn-success btn-sm my-2">
        Add Reply
    </button>
</form>

路线

Route::resource('discussions/{discussion}/replies', 'RepliesController');

控制器

public function store(CreateReplyRequest $request, Discussion $discussion)
{
    auth()->user()->replies()->create([
        'contents' => $request->contents,
        'discussion_id' => $discussion->id
    ]);

    session()->flash('success', 'Reply Added.');

    return redirect()->back();
}
4

1 回答 1

0

您传递了一个讨论对象作为参数,以便将 user_id 存储在一个数组中。我认为这不是存储数据的好习惯。

您可能会注意到您的 routes/web.php 和您的 html 操作都很好并且可以使用 post 但您收到:“Laravel 6 中的路由不支持 POST 方法”。这是运行时错误。当您的逻辑对编译器没有意义时,这可能会发生。

以下步骤可能会帮助您完成您想要的:

1. Eloquent 模型(App\Discussion)

protected $fillable = ['contents'];

public function user(){
   return $this->belongsTo('App\User');
}

2. Eloquent 模型(App\User)

public function discussions(){
   return $this->hasMany('App\Discussion');
}

3.控制器

use App\Discussion;

public function store(Request $request){
   //validate data
    $this->validate($request, [
        'contents' => 'required'
    ]);

   //get mass assignable data from the request
    $discussion = $request->all();

   //store discussion data using discussion object.
   Discussion::create($discussion);

   session()->flash('success', 'Reply Added.');

   return redirect()->back();
}

4. 路由(routes/web.php)

Route::post('/replies/store', 'RepliesController@store')->name('replies.store');

5.查看

<form action="{{ route('replies.store') }}" method="post">
   @csrf
   <input type="hidden" name="contents" id="contents">
   <trix-editor input="contents"></trix-editor>
   <button type="submit" class="btn btn-success btn-sm my-2">
    Add Reply
   </button>
</form>
于 2019-09-29T17:44:47.760 回答