Laravel:将表单发送到数据库时出现TokenMismatch异常

时间:2016-10-07 10:27:51

标签: php laravel token

当我尝试从laravel中的表单中保存数据时总是会出现此错误:

在VerifyCsrfToken.php第68行中的

TokenMismatchException:

但是错误显示当我通过apache访问laravel时,当我通过命令php artisan serve --host 0.0.0.0运行laravel服务器时,它工作正常...

这是我的表单视图:

<form class="" method="POST" action="{{ $card->path() }}/notes">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <div class="form-group">
        <textarea name="body" class="form-control" rows="8" cols="40"></textarea>
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-primary" name="button">Dodaj</button>
    </div>
</form>

这是我的控制者:

<?php

namespace App\Http\Controllers;

use App\Card;
use App\Note;
use Illuminate\Http\Request;

use App\Http\Requests;

class NotesController extends Controller
{
   public function store(Request $request, Card $card)
   {
      $card->notes()->save(
         new Note(['body' => $request->body])
      );

      return back();
    }
}

这是我的功能,它会在成功发送表单到数据库后重定向用户:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Card extends Model
{
    //
    public function notes()
    {
       return $this->hasMany(Note::class);
    }

    public function path()
    {
        return '/cards/' . $this->id;
    }
}

5 个答案:

答案 0 :(得分:0)

在表单标记{{ csrf_field() }}

之后添加此内容

答案 1 :(得分:0)

在标题

中添加此行
<meta name="csrf-token" content="{{ csrf_token() }}" />

答案 2 :(得分:0)

首先按

清除视图
php artisan view:clear

然后将您的观点写为

<form class="" method="POST" action="{{ $card->path() }}/notes">
{!! csrf_field() !!}
    <div class="form-group">
        <textarea name="body" class="form-control" rows="8" cols="40"></textarea>
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-primary" name="button">Dodaj</button>
    </div>
</form>

这可能会解决您的问题

答案 3 :(得分:0)

在Laravel中,最佳做法是使用Blade表单。它将自己创建令牌。

{!! Form::open(['action'=>$card->path().'/notes','method'=>'post']) !!}
    // fields and buttons
{!! Form::close() !!}

答案 4 :(得分:0)

我遇到了同样的问题,并通过清除视图缓存修复了它:php artisan view:clear然后将存储文件夹更改为777 而不是775