Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

TokenMismatchException

Boa tarde, estou com problema, não estou conseguindo salvar meu produto no banco, está dando problema de TokenMismatchException, mas no formulário eu já estou usando o input com csrf, para poder funcionar normal, porém continua da mesma maneira

4 respostas

Thiago, você pode mandar a parte do código que é responsável por salvar o produto no banco? É legal você mandar do form até chegar no DAO.

Model

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Produto extends Model
{
    //
    protected $table = 'produtos';
    protected $fillable = array('nome','descricao','quantidade','valor','tamanho','categoria_id');
    public $timestamps = false;
}

Form

@extends('layout.principal')

@section('conteudo')
<div id="app">
<div class="container">
<br><br>
        <form v-on:submit.prevent="enviaForm" method="post" action="store">

        <input type="hidden" name="_token" value="{{{ csrf_token() }}}" />


        <div class="form-group">
            <label >Nome
                <input  class="form-control"  v-model="produto.nome" type="text" name="nome">
            </label>
        </div>
        <div class="form-group">
            <label >Valor
                <input  class="form-control"  v-model="produto.valor" type="text" name="valor">
            </label>
        </div>
        <div class="form-group">
            <label >Quantidade
                <input  class="form-control"  v-model="produto.quantidade" type="text" name="quantidade">
            </label>
        </div>
        <div class="form-group">
            <label >Tamanho
                <input  class="form-control"  v-model="produto.tamanho" type="text" name="tamanho">
            </label>
        </div>
        <div class="form-group">
            <label>Categoria</label>
            <select class="form-control"  v-model="produto.categoria_id" name="categoria_id" class="form-control">
                 <option value="1">111</option>
                 <option value="2">222</option>
                  <option value="3">333</option>
            </select>
        </div>
        <div class="form-group">
            <label>Descricao
            <textarea class="form-control"  v-model="produto.descricao" name="descricao"></textarea>
            </label>
        </div>
        <button class="btn btn-primary" type="submit">Salvar</button>
    </form>
</div>
</div>
<script src="/js/vue.min.js"></script>
<script src="/js/vueresource.min.js"></script>
<script src="/js/produtos/formadd.js"></script>
@stop

Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Produto;
class pController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        return view('produto.lista');
    }
     public function lista()
    {
        //

        return Produto::all();
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('produto.form');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
        //dd($request->input('nome'));
        Produto::create($request->all());
        return redirect()->action('pController@index');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

Requisição Ajax usando o vue-resource

new Vue({
    el:'#app',
    data:{
        produtos:{}
    },
    created: function(){
        this.pegarForm();



    },
    methods:{
        pegarForm(){
            this.$http.get('http://127.0.0.1:8000/lista').then(res => res.json()).then(produtos => this.produtos = produtos);
            //console.log(this.produtos);
        }
    }

});
solução!

oi, Thiago

Consegue conferir se nesse seu ajax, do vue-resource, o parametro _token está sendo enviado junto com os dados do produto na requisiçao?

Esse erro normalmente acontece quando:

1- o _token não está sendo enviado

2- está indo com nome errado, algum espaço antes/depois do token, etc.

Se ainda assim não funcionar, pode passar mais detalhes sobre a sua versão do PHP e Laravel?

abracos

Ao atualizar o php e mudar do vue-resource para o axios deu tudo certo, vlw ai.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software