Laravel 使用 post 方法的表单未提交

Laravel form with post method is not submitting

我有一个表格 post 有一个标题和一个 body。当我提交时,没有任何反应。我有一个 csrf 字段,我正在使用 post 方法。

我尝试了很多不同的方式来声明动作和方法。我也尝试以不同的方式调用 csrf 字段。 None 有效。

路线:

Route::resource('/posts', 'PostsController');

Create.blade.php

<form action="{{route('posts.store')}}" method="POST">
    @csrf
    // removed @method('POST')
    <div class="form-group">
        <label for="title">Title</label>
        <input type="text" name="title" class="form-control" placeholder="Title">
    </div>
    <div class="form-group">
        <label for="body">Body</label>
        <textarea name="body" placeholder="Body" class="form-control" cols="30" rows="10"></textarea>
    </div>
    <input type="button" name="submit" value="Submit" class="btn btn-primary">
</form>

Post控制器:

public function store(Request $request)
    {
        return "Form posted";
    }

Post 型号:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    // 
}

这里有所有可用的路线:

PostsController 中的存储函数为空。所以我希望在提交时收到一个空白页面,但没有任何反应。

这是为了创建新的数据库注册表,还是为了编辑现有的数据库注册表?

如果是用于创建,则完全删除 @method('POST') 位。如果是为了编辑,就改成@method('PATCH').

移除@method('POST')

<form action="{{route('posts.store')}}" method="POST">
     {{ csrf_field() }}
    <div class="form-group">
        <label for="title">Title</label>
        <input type="text" name="title" class="form-control" placeholder="Title">
    </div>
    <div class="form-group">
        <label for="body">Body</label>
        <textarea name="body" placeholder="Body" class="form-control" cols="30" rows="10"></textarea>
    </div>
    <button type="submit" class="btn btn-primary"> Submit  </button>
</form>

在您的控制器中

public function store(Request $request)
{
   echo '<pre>';
   print_r($request->all());
}

dilip hirapara在评论中给出了解决方案。

我删除了:

<input type="button" name="submit" value="Submit" class="btn btn-primary"> 

并添加:

<button type="submit" class="btn btn-primary"> Submit </button>
    <meta name="csrf-token" content="{{ csrf_token() }}">

把这个放在你的头文件中。有时对于 csrf,我们需要将其作为元标记。